module UntypedPlutusCore.MkUPlc (UVarDecl (..), uvarDeclName, uvarDeclAnn, mkVar, mkIterLamAbs, Def (..), UTermDef) where
import PlutusCore.MkPlc (Def (..))
import UntypedPlutusCore.Core.Type
type UTermDef name uni fun ann = Def (UVarDecl name ann) (Term name uni fun ann)
mkVar :: UVarDecl name ann -> Term name uni fun ann
mkVar :: forall name ann (uni :: * -> *) fun.
UVarDecl name ann -> Term name uni fun ann
mkVar UVarDecl name ann
uvd = ann -> name -> Term name uni fun ann
forall name (uni :: * -> *) fun ann.
ann -> name -> Term name uni fun ann
Var (UVarDecl name ann -> ann
forall name ann. UVarDecl name ann -> ann
_uvarDeclAnn UVarDecl name ann
uvd) (UVarDecl name ann -> name
forall name ann. UVarDecl name ann -> name
_uvarDeclName UVarDecl name ann
uvd)
mkIterLamAbs
:: [UVarDecl name ann]
-> Term name uni fun ann
-> Term name uni fun ann
mkIterLamAbs :: forall name ann (uni :: * -> *) fun.
[UVarDecl name ann]
-> Term name uni fun ann -> Term name uni fun ann
mkIterLamAbs [UVarDecl name ann]
args Term name uni fun ann
body =
(UVarDecl name ann
-> Term name uni fun ann -> Term name uni fun ann)
-> Term name uni fun ann
-> [UVarDecl name ann]
-> Term name uni fun ann
forall a b. (a -> b -> b) -> b -> [a] -> b
forall (t :: * -> *) a b.
Foldable t =>
(a -> b -> b) -> b -> t a -> b
foldr (\(UVarDecl ann
ann name
name) Term name uni fun ann
acc -> ann -> name -> Term name uni fun ann -> Term name uni fun ann
forall name (uni :: * -> *) fun ann.
ann -> name -> Term name uni fun ann -> Term name uni fun ann
LamAbs ann
ann name
name Term name uni fun ann
acc) Term name uni fun ann
body [UVarDecl name ann]
args