| Safe Haskell | Safe-Inferred |
|---|---|
| Language | Haskell2010 |
PlutusIR.Core.Type
Documentation
We use a newtype to enforce separation between names used for types and
those used for terms.
Instances
| Reference TyName (Datatype tyname name uni) # | Scoping for data types is hard, so we employ some extra paranoia and reference the provided
| |
Defined in PlutusIR.Core.Instance.Scoping Methods referenceVia :: (forall name0. Reference instances this one does not guarantee that the name will actually be referenced, but it's too convenient to have this instance to give up on it, without it would be awkward to express "reference this binding in this thing". | ||
Defined in PlutusIR.Core.Instance.Scoping Methods referenceVia :: (forall name0. Reference TyName (Datatype tyname name uni) # | Scoping for data types is hard, so we employ some extra paranoia and reference the provided
| |
Defined in PlutusIR.Core.Instance.Scoping Methods referenceVia :: (forall name0. NameAnn # | ||
| type Rep (Datatype tyname name uni a) # | ||
Defined in PlutusIR.Core.Type type Rep (Datatype tyname name uni a) = D1 ('MetaData "Datatype" "PlutusIR.Core.Type" "plutus-core-1.60.0.0-inplace-plutus-ir" 'False) (C1 ('MetaCons "Datatype" 'PrefixI 'False) ((S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 a) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (TyVarDecl tyname a))) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [TyVarDecl tyname a]) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 name) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [VarDecl tyname name uni a]))))) | ||
datatypeNameString :: Datatype TyName name uni a -> String #
data Recursivity #
Each multi-let-group has to be marked with its scoping:
* NonRec: the identifiers introduced by this multi-let are only linearly-scoped,
i.e. an identifier cannot refer to itself or later-introduced identifiers of the group.
* Rec: an identifiers introduced by this multi-let group can use all other multi-lets
of the same group (including itself), thus permitting (mutual) recursion.
Instances
| Semigroup Recursivity # | Recursivity can form a |
Defined in PlutusIR.Core.Type Methods (<>) :: Recursivity -> Recursivity -> Recursivity # sconcat :: Reference instances this one does not guarantee that the name will actually be referenced, but it's too convenient to have this instance to give up on it, without it would be awkward to express "reference this binding in this thing". | |
Defined in PlutusIR.Core.Instance.Scoping Methods referenceVia :: (forall name0. HasUniques (Term tyname name uni fun ann) | |
The version of Plutus Core used by this program.
The intention is to convey different levels of backwards compatibility for existing scripts: - Major version changes are backwards-incompatible - Minor version changes are backwards-compatible - Patch version changes should be entirely invisible (and we will likely not use this level)
The version used should be changed only when the language itself changes. For example, adding a new kind of term to the language would require a minor version bump; removing a kind of term would require a major version bump.
Similarly, changing the semantics of the language will require a version bump, typically a major one. This is the main reason why the version is actually tracked in the AST: we can have two language versions with identical ASTs but different semantics, so we need to track the version explicitly.
Compatibility is about compatibility for specific scripts, not about e.g. tools which consume scripts. Adding a new kind of term does not change how existing scripts behave, but does change what tools would need to do to process scripts.
Constructors
| Version | |
Fields
bindingAnn :: Binding tyname name uni fun a -> a # | |