pmax
andpmin
as new methods ofPOrd
#>
and#>=
as argument-flipping versions of#<
and#<=
pallBS
toPlutarch.ByteString
(originally fromplutarch-extra
)pisHexDigit
toPlutarch.String
(originally fromplutarch-extra
)preverse
andpcheckSorted
toPlutarch.List
(originally fromplutarch-extra
)ptraceIfNothing
,pisJust
,pmaybe
,pfromMaybe
,pjust
,pnothing
,pAssertPJust
toPlutarch.Maybe
(originally fromplutarch-extra
)pexpectJustC
toPlutarch.TermCont
(originally fromplutarch-extra
)PCountable
andPEnumerable
type classes, as well as instancesPByte
type as a limited Plutarch-level equivalent toWord8
PLogicSemantics
, and construction functions, to help use of logicalPByteString
operationspandBS
,porBS
,pxorBS
,pcomplementBS
mirroring CIP-122 operationspzeroesBS
,ponesBS
,preplicateBS
, as wrappers for CIP-122'sReplicateByte
compileOptimized
inPlutarch.Internal
, to optimize the generated UPLCPBitString
and associated functionality for CIP-122 and CIP-123 operations on bits, inPlutarch.BitString
PEitherData
, aData
-encoded counterpart toPEither
, plus some functionsPositive
type inPlutarch.Positive
that is Haskell level equivalent ofPPositive
PUnsafeLiftDecl
andPConstantDecl
instances forPPositive
evalScriptUnlimited
toPlutarch.Evaluate
as unrestricted version ofevalScript
pmapMaybe
toPlutarch.Maybe
PLiftable
type classPlutarch.Builtin.Bool
modulePlutarch.Internal.Eq
modulePlutarch.Internal.Ord
modulepif'
toPlutarch.Prelude
pcond
as a Plutarch equivalent to multi-way ifPLiftable PRational
instancePDataFields
,DerivePDataLiftable
,PDataNewtype
now exported from the prelude- New methods for
Data
and Scott encoding derivation optimizeTerm
for separate optimization via UPLC from compilation- New numerical hierarchy in
Plutarch.Internal.Numeric
, plus new instances PNatural
type, corresponding to the HaskellNatural
- Support for SoP encoding of data
PSemigroup
andPMonoid
, as improved Plutarch versions ofSemigroup
andMonoid
- Unrolling utilities--
punrollBound
,punrollUnbound
, andpunrollUnboundWhole
--is added toPlutarch.Unroll
evalTerm'
is added toPlutarch.Evaluate
pconsBS
now takes aPByte
argument instead of aPInteger
onepindexBS
now returns aPByte
instead of aPInteger
pexpModInteger
is now inPlutarch.Integer
PMaybeData
no longer usesPDataRecord
Plutarch.Internal
is nowPlutarch.Internal.Term
to better reflect its actual contentsPBool
definition is now inPlutarch.Builtin.Bool
PEq
type class definition is now inPlutarch.Internal.Eq
PPartialOrd
andPOrd
type class definitions are now inPlutarch.Internal.Ord
pif
,pif'
,pand
,pand'
,por
,por'
,pnot
,#&&
,#||
are now inPlutarch.Builtin.Bool
Term s PRational
is nowFractional
directly, instead of by way ofPFractional
Plutarch.Num
is nowPlutarch.Internal.Numeric
PIntegral
type class is now inPlutarch.Internal.Numeric
Plutarch.Integer
is nowPlutarch.Builtin.Integer
#<
,#<=
,#>=
,#>
are now part ofPOrd
PPositive
(andPositive
) are now exported from the prelude, along with some functionalityPEither
,PPair
,PMaybe
andPList
use SOP encoding instead of Scott
plutarch-extra
, as all its functionality has been folded into Plutarch itselfpbyteStr
(as it's deprecated)Plutarch.Bitwise
module, as its functionality has been superseded by more type-safe operations inPlutarch.ByteString
andPlutarch.BitString
PUnsafeLiftDecl
andPConstantDecl
as they are replaced byPLiftable
Plutarch
module, as it served no useful purpose and was just confusingPType
synonym (useS -> Type
honestly instead)PSBool
and functionality (now inplutarch-ledger-api
)PFractional
type class (only one instance, unlikely to ever have more)PIsData PRational
instance (made no sense)PPartialOrd
(all its functionality is now inPOrd
)Plutarch.FFI
modulePNum
andPIntegral
(replaced by new numerical hierarchy)
- Bug in
ppredecessorN
forPPosixTime
where order of subtraction was flipped - Bugs in
pintersection
andphull
that assigned wrong open/close bounds - Bug in
pafter
that will give opposite result when comparing against infinities
- Cryptographic hashing utilities:-
pripemd_160
,pkeccak_256
, andpblake2b_224
toPlutarch.Crypto
- PlutusV3 BLS primitives to
Plutarch.BLS
- PlutusV3 Bitwise primitives to
Plutarch.Bitwise
unsafeEvalTerm
toPlutarch.Evaluate
PCountable
andPEnumerable
type classes inPlutarch.Enum
- Bumped
plutus-core
version to1.33.0.0
- Updated getArity mapping to handle the new builtins in
Plutarch.Internal
- Updated
printScript
inPlutarch.Internal.Other
to new PlutusCore version.
applyArguments
toPlutarch.Evaluate
- Bumped
plutus-core
version to1.30.0.0
PDataNewtype
derivation aidPTryFrom PData PBool
instance
- Bumped
plutus-core
version to1.29.0.0
ptraceInfo
andptraceDebug
, which allow tracing only when a particular log level is active.logLevel
to get theLogLevel
of aConfig
.LogLevel
to indicate what level of logging we'd like to run with.ptraceInfoShowId
,ptraceInfoError
,ptraceInfoIfTrue
,ptraceInfoIfFalse
(and similar forDebug
), mirroring the deprecated originals, but with the logging level included.Eq
,Show
,Pretty
,ToJSON
,FromJSON
instances forConfig
.Pretty
,ToJSON
,FromJSON
instances forTracingMode
.
ptrace
,ptraceShowId
,ptraceError
,ptraceIfTrue
andptraceIfFalse
are now synonyms ofptraceInfo
(and similar), and also deprecated.Config
now includes aLogLevel
as well as aTracingMode
.Config
now has pattern synonyms to make it look like a sum type with two arms:NoTracing
which indicates that we do not trace, andTracing
which contains aTracingMode
and aLogLevel
.TracingMode
no longer includesNoTracing
, as this has been superseded by the newConfig
.tracingMode
now returns in aMaybe
.Config
is now aSemigroup
and aMonoid
, with the second mimicking the semantics of its oldDefault
instance.TracingMode
is now aSemigroup
based on generality.TracingMode
is now anOrd
based on generality.TracingMode
now hasEq
andShow
instances.
Default
instance forConfig
.data-default
direct dependency.
- Bump
plutus-core
andplutus-ledger-api
to1.20.0.0
Plutarch.LedgerApi
, plus all submodules, as these are now underplutarch-ledger-api
- Renamed
punionWith
andpunionWithData
ofPlutarch.Api.V1.AssocMap
topunionResolvingCollisionsWith
andpunionResolvingCollisionsWithData
, since they have been misused for what should have beenpzipWith
andpzipWithData
. - Renamed
punionWith
andpunionWithData
ofPlutarch.Api.V1.Value
topunionResolvingCollisionsWith
andpunionResolvingCollisionsWithData
, since they have been misused for what should have beenpzipWith
andpzipWithData
. - Introduced
pzipWith
,pzipWithData
,pzipWithDefault
,pzipWithDataDefault
,pzipWithDefaults
,pzipWithDataDefaults
,pintersectionWith
, andpintersectionWithData
inPlutarch.Api.V1.AssocMap
. Also introduced the typesBothPresentHandler
,BothPresentHandlerCommutative
,OnePresentHandler
,MergeHandler
andSomeMergeHandler
for instructingpzipWith
andpzipWithData
. - Added
Commutativity
inAssocMap
for instructing variousAssocMap
andValue
operations about the commutativity of the given value-merging function. - Renamed
pdifference
inAssocMap
topunsortedDifference
(O(n^2)). Introduced newpdifference
with stricter constraints and O(n). - Added
pleftBiasedUnion
inPlutarch.Api.V1.AssocMap
. - Added
pleftBiasedCurrencyUnion
andpleftBiasedTokenUnion
inPlutarch.Api.V1.Value
.
- Support newer Plutus
- Remove most of the Nix code and switch to mlabs-tooling.nix
- Exported data constructors instance for
Plutarch.Lift (LiftError)
-
Changed fields of
PTxInfo
whose only representation is data to not be wrapped byPAsData
.Module:
Plutarch.Api.V1.Contexts
;Plutarch.Api.V2.Contexts
-
Added
plistData
builtin function wrapper.Module:
Plutarch.Builtin
-
Added
PEq
superclass constraint toPOrd
Included by #326
-
Added module
Plutarch.Show
with thePShow
type class, as well as functionspshow
andptraceShowId
.Started by #352
-
Add
puncons
andptryUncons
functions for deconstructing list.Started by: #333
-
Add generic deriving for
PEq
Started by #335
-
Plutarch.Prelude
andPlutarch.List
now export pfind, pelemAt, preserve and pcheckSroted.Started by: #306
-
Added module
Plutarch.FFI
for interoperability with PlutusTx. -
Added
DerivePConstantViaBuiltin
, deprecatingDerivePConstantViaNewtype
. -
TermCont
: Parametrize by result type; addMonadFail
instance; etc.Also, export from
Plutarch.TermCont
, and then fromPlutarch.Prelude
(TermCont is no longer exported byPlutarch.Internal
).Started by: #226
-
Add
PlutusType
generic deriving support for data encoded Plutarch types, viaPIsDataRepr
andPIsDataReprInstances
.All existing ledger api types now have
PlutusType
instances - not justPMatch
.Started by: #250
-
Add
PDataRecord
construction utilities, necessary for full usage of data encodedPlutusType
instances.In particular, you can build
PDataRecord
s withpdcons
andpdnil
- refer to the guide for more info.pdcons
andpdnil
are also exported fromPlutarch.Prelude
.Also add
PlutusType
instance forPDataRecord
.Module:
Plutarch.DataRepr.Internal
Started by: #250
-
Export
PLabeledType ((:=))
fromPlutarch.Prelude
.Added by: #250
-
Add
pconstantData
- an efficient way of building data encoded constants directly.This is semantically equivalent to
pdata . pconstant
but does not do any extra builtin function call.Module:
Plutarch.Builtin
Added by: #251
-
Added APIs for constructing, compiling, serialising & hashing Plutarch scripts.
Type synonyms for Plutarch-typed scripts
PValidator
,PMintingPolicy
&PStakeValidator
.mkValidator
,mkStakeValidator
&mkMintingPolicy
functions, for creating Plutus API compatible scripts.validatorHash
,mintingPolicySymbol
&stakeValidatorHash
to obtain script hashes.Module:
Plutarch.V1.Api
See:
Plutarch.ScriptsSpec
inplutarch-test
for usage examples.Added by: #267
-
Add
PTuple
construction and related utilities.Module:
Plutarch.Api.V1.Tuple
Added by: #255
-
Add
PIsData
instances forPUnit
andPBuiltinPair (PAsData a) (PAsData b)
.It's helpful to mentally note that
PTuple a b
,PAsData (PTuple a b)
andPBuiltinPair (PAsData a) (PAsData b)
all have the exact same underlying representation. SeePlutarch.Api.V1.Tuple
for no-op conversion functions.Module:
Plutarch.Builtin
Added by: #255
-
Add implicit
pfromData
forhrecField
and the record dot. Add implicitpfromData
forpfield
.Module:
Plutarch.DataRepr
Added by: #235
-
Add
Plutarch.Test
for testing Plutarch code with goldens for UPLC printing and Plutus benchmarks. -
Add Conversion types
PTryFrom
,PMaybeFrom
andPFrom
Module:
Plutarch.TryFrom
Added by: #326
-
plutarch-extra
: Add a new directory scaffold "plutarch-extra
" which will be home to everything too specific to not be in the main Plutarch repo. Also refactored the test library.Directory:
plutarch-extra
Added by: #329
-
plutarch-extra
export merged PreludeModule:
Plutarch.PPrelude
Added by: #356
-
Add
PConstant
instance forMaybe
, with correspondingPLift
instance forPMaybeData
.Added by: #371
-
Add
POrd
andPEq
derivation for data encoded types viaPIsDataReprInstances
.Added by: #371
-
Make
PRational
construction machinery fail when the denominator is 0.Fixed by: #299
-
Rename
PConstant
(the typeclass) toPConstantDecl
.PConstant
is now a type alias with extra constraints for better type checking.Add
PLiftData
andPConstantData
type aliases.Added by: #354
-
Remove
hrecField
export. UsegetField
instead.Removed by: #415
-
Rename the
"data"
field ofPTxInfo
to"datums"
.Renamed by: #415
-
Add
Num
instance forPPOSIXTime
and export its constructor.Added by: #415
-
PlutusType
is now a superclass ofPIsDataRepr
, strengthening the existingPMatch
superclass constraint.Added by: #415
-
Add
PlutusType
instance forPDataSum
.PDataSum
can now be hand-constructed.Added by: #345
-
Add
HRecOf
,PMemberFields
, andPMemberField
utility types.Module:
Plutarch.DataRepr
.Added by: #466
-
Move
Plutarch.ListUtils
toPlutarch.Extra.List
.Added by: #466
-
Add various
TermCont
utilities:ptraceC
,pletFieldsC
,ptryFromC
,pguardC
, andpguardC'
.Module:
Plutarch.Extra.TermCont
.Added by: #466
-
General repository changes.
-
The Plutarch repo has moved to GHC 9.2.1. Projects using GHC 8.10.7 should still be able to depend on Plutarch. There is CI in place to ensure compatibility.
Relevant PR: #86
CI added by: #188
-
Major nix updates.
Started by: #75
-
Benchmarks and perf diffing on PRs to keep track of performance regressions.
Worked on through:
-
-
Significantly improve
plam
type inference - works seamlessly now (!!!)Worked on through:
Relevant issue: #2
-
Many, many optimizations on generated code.
Worked on through:
-
Add haddocks and examples to many functions
Started by: #49
-
Add many new utility functions, instances, and builtin function synonyms.
Breakdown of additions
-
Boolean utilities:-
pnot
,#&&
/pand
/pand'
,#||
/por
/por'
Module:
Plutarch.Bool
Added in: #30
-
ByteString utilities:-
pconsBS
,psliceBS
,plengthBS
,pindexBS
Module:
Plutarch.ByteString
Added in: #30
-
Cryptographic hashing utilities:-
psha2_256
,psha3_256
,pblake2b_256
,pverifySignature
Module:
Plutarch.Crypto
Added in: #30
-
PEq
,POrd
,Semigroup
, andMonoid
instances forPUnit
Module:
Plutarch.Unit
Added in: #30
-
UTF-8 encode/decode functions:-
pencodeUtf8
,pdecodeUtf8
Module:
Plutarch.String
Added in: #30
-
PIntegral
typeclassModule:
Plutarch.Integer
Added in: #30
-
PIntegral
instance forPInteger
Module:
Plutarch.Integer
Added in: #30
-
PEq
instance forPData
andPAsData
Module:
Plutarch.Builtin
Added in: #38
-
Tracing functions:-
ptrace
,ptraceIfFalse
,ptraceIfTrue
,ptraceError
Module:
Plutarch.Trace
Added in: #39
-
Builtin pair construction utility:-
ppairDataBuiltin
Module:
Plutarch.Builtin
Added in: #50
-
Loads of awesome list utilities thanks to #63!
Module:
Plutarch.List
-
PIsData
instance forPBool
Module:
Plutarch.Builtin
Added in: #110
-
-
Add
PIsData
for conversion between normal builtin types and theirData
representation.Initially added in: #31
-
Add
PAsData
for preserving more type information regardingData
encoded values.Initially added in: #31
-
Add
PDataRepr
and related machinery to ergonomically work withConstr
encoded data.There are also generic derivers (!!) to implement the related typeclasses for custom data types.
Module:
Plutarch.DataRepr
Worked on through
-
Add
PLift
andPConstant
- enabling conversion between Plutarch terms and Haskell types.This comes with convenient derivers. See the relevant section on the guide.
Module:
Plutarch.Lift
; another deriver withinPlutarch.DataRepr.Internal
Worked on through
-
Deprecate
punsafeConstant
. Usepconstant
instead! -
Add
PIsList
&PList
+ instances forPBuiltinList
- ergonomic list functions for all!Module:
Plutarch.List
; another instance inPlutarch.Builtin
Added in: #63
-
Mutually recursive data types, scott encoded records and more provided by
Plutarch.Rec
!Module:
Plutarch.Rec
Worked on through:
-
The Plutus V1 ledger api types implemented in Plutarch!
Module:
Plutarch.Api.V1
Worked on through:
-
Implement Plutarch rational type.
Module:
Plutarch.Rational
Added in: #89
-
The
s
inTerm s _
has a fixed kind now.data S
,s :: S
Module:
Plutarch.Internal
Added in: #115
-
Add
PType
, a synonym toS -> Type
- i.e the kind of Plutarch types. In particular, the kind of the 3rd type parameter ofTerm
.Module:
Plutarch.Internal
Added in: #115
-
Convenient do syntax with
QualifiedDo
(!!!)Module:
Plutarch.Monadic
Added in: #119
-
Add
DerivePNewtype
to derive common typeclasses for Plutarch newtypes.Module:
Plutarch
;Plutarch.Builtin
;Plutarch.Bool
;Plutarch.Integer
Added in: #151
-
A whole lot more exports from
Plutarch.Prelude
Module:
Plutarch.Prelude
Added in: #181
-
Move out
punsafe*
functions fromPlutarch
and intoPlutarch.Unsafe
. -
Add generic deriving for
PlutusType
with scott encoding representation.Added in: #189
Thanks to:
- @blamario
- @emiflake
- @Geometer1729
- @kozross
- @L-as
- @MatthewCroughan
- @sergesku
- @srid
- @t1lde
- @TotallyNotChase
Somewhat stable release