| Safe Haskell | None |
|---|---|
| Language | Haskell2010 |
PlutusIR.Core.Type
Synopsis
- newtype TyName = TyName {}
- data Name = Name {
- nameString :: Text
- nameUnique :: Unique
- data VarDecl tyname name uni fun ann = VarDecl {
- _varDeclAnn :: ann
- _varDeclName :: name
- _varDeclType :: Type tyname uni ann
- data TyVarDecl tyname ann = TyVarDecl {
- _tyVarDeclAnn :: ann
- _tyVarDeclName :: tyname
- _tyVarDeclKind :: Kind ann
- varDeclNameString :: VarDecl tyname Name uni fun a -> String
- tyVarDeclNameString :: TyVarDecl TyName a -> String
- data Kind ann
- data Type tyname uni ann
- = TyVar ann tyname
- | TyFun ann (Type tyname uni ann) (Type tyname uni ann)
- | TyIFix ann (Type tyname uni ann) (Type tyname uni ann)
- | TyForall ann tyname (Kind ann) (Type tyname uni ann)
- | TyBuiltin ann (SomeTypeIn uni)
- | TyLam ann tyname (Kind ann) (Type tyname uni ann)
- | TyApp ann (Type tyname uni ann) (Type tyname uni ann)
- data Datatype tyname name uni fun a = Datatype a (TyVarDecl tyname a) [TyVarDecl tyname a] name [VarDecl tyname name uni fun a]
- datatypeNameString :: Datatype TyName Name uni fun a -> String
- data Recursivity
- data Strictness
- data Binding tyname name uni fun a
- = TermBind a Strictness (VarDecl tyname name uni fun a) (Term tyname name uni fun a)
- | TypeBind a (TyVarDecl tyname a) (Type tyname uni a)
- | DatatypeBind a (Datatype tyname name uni fun a)
- data Term tyname name uni fun a
- = Let a Recursivity (NonEmpty (Binding tyname name uni fun a)) (Term tyname name uni fun a)
- | Var a name
- | TyAbs a tyname (Kind a) (Term tyname name uni fun a)
- | LamAbs a name (Type tyname uni a) (Term tyname name uni fun a)
- | Apply a (Term tyname name uni fun a) (Term tyname name uni fun a)
- | Constant a (Some (ValueOf uni))
- | Builtin a fun
- | TyInst a (Term tyname name uni fun a) (Type tyname uni a)
- | Error a (Type tyname uni a)
- | IWrap a (Type tyname uni a) (Type tyname uni a) (Term tyname name uni fun a)
- | Unwrap a (Term tyname name uni fun a)
- data Program tyname name uni fun ann = Program {}
- applyProgram :: Monoid a => Program tyname name uni fun a -> Program tyname name uni fun a -> Program tyname name uni fun a
- termAnn :: Term tyname name uni fun a -> a
- progAnn :: forall tyname name uni fun ann. Lens' (Program tyname name uni fun ann) ann
- progTerm :: forall tyname name uni fun ann tyname name uni fun. Lens (Program tyname name uni fun ann) (Program tyname name uni fun ann) (Term tyname name uni fun ann) (Term tyname name uni fun ann)
Documentation
We use a newtype to enforce separation between names used for types and
those used for terms.
Instances
| Eq TyName Source # | |
| Ord TyName Source # | |
| Show TyName Source # | |
| Generic TyName Source # | |
| Hashable TyName Source # | |
| NFData TyName Source # | |
Defined in PlutusCore.Name | |
| Flat TyName Source # | |
| Wrapped TyName Source # | |
| ToScopedName TyName Source # | |
Defined in PlutusCore.Check.Scoping Methods toScopedName :: TyName -> ScopedName Source # | |
| Lift TyName Source # | |
| HasPrettyConfigName config => PrettyBy config TyName Source # | |
| HasUnique TyName TypeUnique Source # | |
Defined in PlutusCore.Name | |
| tyname ~ TyName => Reference TyName (Type tyname uni) Source # | |
Defined in PlutusCore.Core.Instance.Scoping Methods referenceVia :: (forall name. ToScopedName name => name -> NameAnn) -> TyName -> Type tyname uni NameAnn -> Type tyname uni NameAnn Source # | |
| tyname ~ TyName => Reference TyName (Term tyname name uni fun) Source # | |
Defined in PlutusCore.Core.Instance.Scoping Methods referenceVia :: (forall name0. ToScopedName name0 => name0 -> NameAnn) -> TyName -> Term tyname name uni fun NameAnn -> Term tyname name uni fun NameAnn Source # | |
| tyname ~ TyName => Reference TyName (Term tyname name uni fun) Source # | |
Defined in PlutusIR.Core.Instance.Scoping Methods referenceVia :: (forall name0. ToScopedName name0 => name0 -> NameAnn) -> TyName -> Term tyname name uni fun NameAnn -> Term tyname name uni fun NameAnn Source # | |
| tyname ~ TyName => Reference TyName (Binding tyname name uni fun) Source # | |
Defined in PlutusIR.Core.Instance.Scoping Methods referenceVia :: (forall name0. ToScopedName name0 => name0 -> NameAnn) -> TyName -> Binding tyname name uni fun NameAnn -> Binding tyname name uni fun NameAnn Source # | |
| tyname ~ TyName => Reference TyName (Datatype tyname name uni fun) Source # | 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. ToScopedName name0 => name0 -> NameAnn) -> TyName -> Datatype tyname name uni fun NameAnn -> Datatype tyname name uni fun NameAnn Source # | |
| tyname ~ TyName => Reference TyName (VarDecl tyname name uni fun) Source # | |
Defined in PlutusIR.Core.Instance.Scoping Methods referenceVia :: (forall name0. ToScopedName name0 => name0 -> NameAnn) -> TyName -> VarDecl tyname name uni fun NameAnn -> VarDecl tyname name uni fun NameAnn Source # | |
| Flat (Binder TyName) Source # | |
| (GEq uni, Eq ann) => Eq (Type TyName uni ann) Source # | |
| TermLike (Term name uni fun) TyName name uni fun Source # | |
Defined in UntypedPlutusCore.Core.Type Methods var :: ann -> name -> Term name uni fun ann Source # tyAbs :: ann -> TyName -> Kind ann -> Term name uni fun ann -> Term name uni fun ann Source # lamAbs :: ann -> name -> Type TyName uni ann -> Term name uni fun ann -> Term name uni fun ann Source # apply :: ann -> Term name uni fun ann -> Term name uni fun ann -> Term name uni fun ann Source # constant :: ann -> Some (ValueOf uni) -> Term name uni fun ann Source # builtin :: ann -> fun -> Term name uni fun ann Source # tyInst :: ann -> Term name uni fun ann -> Type TyName uni ann -> Term name uni fun ann Source # unwrap :: ann -> Term name uni fun ann -> Term name uni fun ann Source # iWrap :: ann -> Type TyName uni ann -> Type TyName uni ann -> Term name uni fun ann -> Term name uni fun ann Source # error :: ann -> Type TyName uni ann -> Term name uni fun ann Source # termLet :: ann -> TermDef (Term name uni fun) TyName name uni fun ann -> Term name uni fun ann -> Term name uni fun ann Source # typeLet :: ann -> TypeDef TyName uni ann -> Term name uni fun ann -> Term name uni fun ann Source # | |
| AsTypeError (Error uni fun ann) (Term TyName Name uni fun ()) uni fun ann Source # | |
Defined in PlutusCore.Error Methods _TypeError :: Prism' (Error uni fun ann) (TypeError (Term TyName Name uni fun ()) uni fun ann) Source # _KindMismatch :: Prism' (Error uni fun ann) (ann, Type TyName uni (), Kind (), Kind ()) Source # _TypeMismatch :: Prism' (Error uni fun ann) (ann, Term TyName Name uni fun (), Type TyName uni (), Normalized (Type TyName uni ())) Source # _FreeTypeVariableE :: Prism' (Error uni fun ann) (ann, TyName) Source # _FreeVariableE :: Prism' (Error uni fun ann) (ann, Name) Source # _UnknownBuiltinFunctionE :: Prism' (Error uni fun ann) (ann, fun) Source # | |
| AsTypeError (Error uni fun a) (Term TyName Name uni fun ()) uni fun a Source # | |
Defined in PlutusIR.Error Methods _TypeError :: Prism' (Error uni fun a) (TypeError (Term TyName Name uni fun ()) uni fun a) Source # _KindMismatch :: Prism' (Error uni fun a) (a, Type TyName uni (), Kind (), Kind ()) Source # _TypeMismatch :: Prism' (Error uni fun a) (a, Term TyName Name uni fun (), Type TyName uni (), Normalized (Type TyName uni ())) Source # _FreeTypeVariableE :: Prism' (Error uni fun a) (a, TyName) Source # _FreeVariableE :: Prism' (Error uni fun a) (a, Name) Source # _UnknownBuiltinFunctionE :: Prism' (Error uni fun a) (a, fun) Source # | |
| (GEq uni, Closed uni, Everywhere uni Eq, Eq fun, Eq ann) => Eq (Term TyName Name uni fun ann) Source # | |
| HasConstant (Term TyName Name uni fun ()) Source # | |
Defined in PlutusCore.Builtin.HasConstant | |
| (Reference TyName t, Reference Name t) => Reference (Binding TyName Name uni fun ann) t Source # | |
Defined in PlutusIR.Core.Instance.Scoping Methods referenceVia :: (forall name. ToScopedName name => name -> NameAnn) -> Binding TyName Name uni fun ann -> t NameAnn -> t NameAnn Source # | |
| (Reference TyName t, Reference Name t) => Reference (Datatype TyName Name uni fun ann) t Source # | |
Defined in PlutusIR.Core.Instance.Scoping Methods referenceVia :: (forall name. ToScopedName name => name -> NameAnn) -> Datatype TyName Name uni fun ann -> t NameAnn -> t NameAnn Source # | |
| type Rep TyName Source # | |
Defined in PlutusCore.Name | |
| type Unwrapped TyName Source # | |
Defined in PlutusCore.Name | |
A Name represents variables/names in Plutus Core.
Constructors
| Name | |
Fields
| |
Instances
data VarDecl tyname name uni fun ann Source #
A "variable declaration", i.e. a name and a type for a variable.
Constructors
| VarDecl | |
Fields
| |
Instances
| tyname ~ TyName => Reference TyName (VarDecl tyname name uni fun) Source # | |
Defined in PlutusIR.Core.Instance.Scoping Methods referenceVia :: (forall name0. ToScopedName name0 => name0 -> NameAnn) -> TyName -> VarDecl tyname name uni fun NameAnn -> VarDecl tyname name uni fun NameAnn Source # | |
| (PrettyClassicBy configName tyname, PrettyClassicBy configName name, GShow uni, Everywhere uni PrettyConst, Pretty ann) => PrettyBy (PrettyConfigClassic configName) (VarDecl tyname name uni fun ann) Source # | |
Defined in PlutusIR.Core.Instance.Pretty Methods prettyBy :: PrettyConfigClassic configName -> VarDecl tyname name uni fun ann -> Doc ann0 Source # prettyListBy :: PrettyConfigClassic configName -> [VarDecl tyname name uni fun ann] -> Doc ann0 Source # | |
| Functor (VarDecl tyname name uni fun) Source # | |
| (tyname ~ TyName, name ~ Name) => CollectScopeInfo (VarDecl tyname name uni fun) Source # | |
Defined in PlutusIR.Core.Instance.Scoping Methods collectScopeInfo :: VarDecl tyname name uni fun NameAnn -> ScopeErrorOrInfo Source # | |
| (Show ann, Show name, Show tyname, GShow uni) => Show (VarDecl tyname name uni fun ann) Source # | |
| Generic (VarDecl tyname name uni fun ann) Source # | |
Defined in PlutusCore.Core.Type | |
| (Closed uni, Flat fun, Flat ann, Flat tyname, Flat name) => Flat (VarDecl tyname name uni fun ann) Source # | |
| (PrettyClassic tyname, PrettyClassic name, GShow uni, Everywhere uni PrettyConst, Pretty ann) => Pretty (VarDecl tyname name uni fun ann) Source # | |
| HasUnique name TermUnique => HasUnique (VarDecl tyname name uni fun ann) TermUnique Source # | |
Defined in PlutusCore.Core.Type | |
| Reference name t => Reference (VarDecl tyname name uni fun ann) t Source # | |
Defined in PlutusIR.Core.Instance.Scoping Methods referenceVia :: (forall name0. ToScopedName name0 => name0 -> NameAnn) -> VarDecl tyname name uni fun ann -> t NameAnn -> t NameAnn Source # | |
| type Rep (VarDecl tyname name uni fun ann) Source # | |
Defined in PlutusCore.Core.Type type Rep (VarDecl tyname name uni fun ann) = D1 ('MetaData "VarDecl" "PlutusCore.Core.Type" "plutus-core-1.0.0.1-AYZ1DL3hDMt58i5HNUtSdG" 'False) (C1 ('MetaCons "VarDecl" 'PrefixI 'True) (S1 ('MetaSel ('Just "_varDeclAnn") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 ann) :*: (S1 ('MetaSel ('Just "_varDeclName") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 name) :*: S1 ('MetaSel ('Just "_varDeclType") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Type tyname uni ann))))) | |
data TyVarDecl tyname ann Source #
A "type variable declaration", i.e. a name and a kind for a type variable.
Constructors
| TyVarDecl | |
Fields
| |
Instances
Instances
data Type tyname uni ann Source #
A Type assigned to expressions.
Constructors
| TyVar ann tyname | |
| TyFun ann (Type tyname uni ann) (Type tyname uni ann) | |
| TyIFix ann (Type tyname uni ann) (Type tyname uni ann) | Fix-point type, for constructing self-recursive types |
| TyForall ann tyname (Kind ann) (Type tyname uni ann) | |
| TyBuiltin ann (SomeTypeIn uni) | Builtin type |
| TyLam ann tyname (Kind ann) (Type tyname uni ann) | |
| TyApp ann (Type tyname uni ann) (Type tyname uni ann) |
Instances
data Datatype tyname name uni fun a Source #
Constructors
| Datatype a (TyVarDecl tyname a) [TyVarDecl tyname a] name [VarDecl tyname name uni fun a] |
Instances
| tyname ~ TyName => Reference TyName (Datatype tyname name uni fun) Source # | 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. ToScopedName name0 => name0 -> NameAnn) -> TyName -> Datatype tyname name uni fun NameAnn -> Datatype tyname name uni fun NameAnn Source # | |
| (PrettyClassicBy configName tyname, PrettyClassicBy configName name, GShow uni, Everywhere uni PrettyConst, Pretty ann) => PrettyBy (PrettyConfigClassic configName) (Datatype tyname name uni fun ann) Source # | |
Defined in PlutusIR.Core.Instance.Pretty Methods prettyBy :: PrettyConfigClassic configName -> Datatype tyname name uni fun ann -> Doc ann0 Source # prettyListBy :: PrettyConfigClassic configName -> [Datatype tyname name uni fun ann] -> Doc ann0 Source # | |
| Functor (Datatype tyname name uni fun) Source # | |
| (tyname ~ TyName, name ~ Name) => CollectScopeInfo (Datatype tyname name uni fun) Source # | |
Defined in PlutusIR.Core.Instance.Scoping Methods collectScopeInfo :: Datatype tyname name uni fun NameAnn -> ScopeErrorOrInfo Source # | |
| (Show a, Show tyname, Show name, GShow uni) => Show (Datatype tyname name uni fun a) Source # | |
| Generic (Datatype tyname name uni fun a) Source # | |
| (Closed uni, Everywhere uni Flat, Flat a, Flat tyname, Flat name, Flat fun) => Flat (Datatype tyname name uni fun a) Source # | |
| (PrettyClassic tyname, PrettyClassic name, GShow uni, Everywhere uni PrettyConst, Pretty ann) => Pretty (Datatype tyname name uni fun ann) Source # | |
| (Reference TyName t, Reference Name t) => Reference (Datatype TyName Name uni fun ann) t Source # | |
Defined in PlutusIR.Core.Instance.Scoping Methods referenceVia :: (forall name. ToScopedName name => name -> NameAnn) -> Datatype TyName Name uni fun ann -> t NameAnn -> t NameAnn Source # | |
| type Rep (Datatype tyname name uni fun a) Source # | |
Defined in PlutusIR.Core.Type type Rep (Datatype tyname name uni fun a) = D1 ('MetaData "Datatype" "PlutusIR.Core.Type" "plutus-core-1.0.0.1-AYZ1DL3hDMt58i5HNUtSdG" '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 fun a]))))) | |
data Recursivity Source #
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
data Strictness Source #
Instances
| Eq Strictness Source # | |
Defined in PlutusIR.Core.Type Methods (==) :: Strictness -> Strictness -> Bool Source # (/=) :: Strictness -> Strictness -> Bool Source # | |
| Show Strictness Source # | |
Defined in PlutusIR.Core.Type | |
| Generic Strictness Source # | |
Defined in PlutusIR.Core.Type | |
| Flat Strictness Source # | |
Defined in PlutusIR.Core.Instance.Flat | |
| PrettyBy (PrettyConfigClassic configName) Strictness Source # | |
Defined in PlutusIR.Core.Instance.Pretty Methods prettyBy :: PrettyConfigClassic configName -> Strictness -> Doc ann Source # prettyListBy :: PrettyConfigClassic configName -> [Strictness] -> Doc ann Source # | |
| type Rep Strictness Source # | |
data Binding tyname name uni fun a Source #
Constructors
| TermBind a Strictness (VarDecl tyname name uni fun a) (Term tyname name uni fun a) | |
| TypeBind a (TyVarDecl tyname a) (Type tyname uni a) | |
| DatatypeBind a (Datatype tyname name uni fun a) |
Instances
data Term tyname name uni fun a Source #
Constructors
| Let a Recursivity (NonEmpty (Binding tyname name uni fun a)) (Term tyname name uni fun a) | |
| Var a name | |
| TyAbs a tyname (Kind a) (Term tyname name uni fun a) | |
| LamAbs a name (Type tyname uni a) (Term tyname name uni fun a) | |
| Apply a (Term tyname name uni fun a) (Term tyname name uni fun a) | |
| Constant a (Some (ValueOf uni)) | |
| Builtin a fun | |
| TyInst a (Term tyname name uni fun a) (Type tyname uni a) | |
| Error a (Type tyname uni a) | |
| IWrap a (Type tyname uni a) (Type tyname uni a) (Term tyname name uni fun a) | |
| Unwrap a (Term tyname name uni fun a) |
Instances
data Program tyname name uni fun ann Source #
Instances
| (PrettyClassicBy configName tyname, PrettyClassicBy configName name, GShow uni, Closed uni, Everywhere uni PrettyConst, Pretty fun, Pretty ann) => PrettyBy (PrettyConfigClassic configName) (Program tyname name uni fun ann) Source # | |
Defined in PlutusIR.Core.Instance.Pretty Methods prettyBy :: PrettyConfigClassic configName -> Program tyname name uni fun ann -> Doc ann0 Source # prettyListBy :: PrettyConfigClassic configName -> [Program tyname name uni fun ann] -> Doc ann0 Source # | |
| (tyname ~ TyName, name ~ Name) => CollectScopeInfo (Program tyname name uni fun) Source # | |
Defined in PlutusIR.Core.Instance.Scoping Methods collectScopeInfo :: Program tyname name uni fun NameAnn -> ScopeErrorOrInfo Source # | |
| (tyname ~ TyName, name ~ Name) => EstablishScoping (Program tyname name uni fun) Source # | |
Defined in PlutusIR.Core.Instance.Scoping | |
| Generic (Program tyname name uni fun ann) Source # | |
Defined in PlutusIR.Core.Type | |
| (Closed uni, Everywhere uni Flat, Flat fun, Flat a, Flat tyname, Flat name) => Flat (Program tyname name uni fun a) Source # | |
| (PrettyClassic tyname, PrettyClassic name, GShow uni, Closed uni, Everywhere uni PrettyConst, Pretty fun, Pretty ann) => Pretty (Program tyname name uni fun ann) Source # | |
| HasUniques (Term tyname name uni fun ann) => Rename (Program tyname name uni fun ann) Source # | |
Defined in PlutusIR.Transform.Rename | |
| type Rep (Program tyname name uni fun ann) Source # | |
Defined in PlutusIR.Core.Type type Rep (Program tyname name uni fun ann) = D1 ('MetaData "Program" "PlutusIR.Core.Type" "plutus-core-1.0.0.1-AYZ1DL3hDMt58i5HNUtSdG" 'False) (C1 ('MetaCons "Program" 'PrefixI 'True) (S1 ('MetaSel ('Just "_progAnn") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 ann) :*: S1 ('MetaSel ('Just "_progTerm") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Term tyname name uni fun ann)))) | |
| type HasUniques (Program tyname name uni fun ann) Source # | |
Defined in PlutusIR.Core.Type | |