@@ -17,11 +17,13 @@ module LambdaBuffers.Runtime.Plutarch.LamVal (
17
17
) where
18
18
19
19
import Plutarch (
20
+ ClosedTerm ,
20
21
Term ,
21
22
pcon ,
22
23
pdelay ,
23
24
perror ,
24
25
pforce ,
26
+ phoistAcyclic ,
25
27
plam ,
26
28
plet ,
27
29
(#) ,
@@ -44,43 +46,43 @@ import Plutarch.Prelude (PAsData, PBuiltinList (PCons), PInteger, PTryFrom, ptra
44
46
import Plutarch.Unsafe (punsafeCoerce )
45
47
46
48
-- | Plutarch `toPlutusData :: a -> PlutusData`
47
- ptoPlutusData :: Term s (PAsData a :--> PData )
49
+ ptoPlutusData :: ClosedTerm (PAsData a :--> PData )
48
50
ptoPlutusData = plam toPlutusData
49
51
50
52
-- | Haskell `toPlutusData :: a -> PlutusData`
51
53
toPlutusData :: Term s (PAsData a ) -> Term s PData
52
54
toPlutusData = pforgetData
53
55
54
56
-- | Plutarch PlutusType `fromPlutusData :: PlutusData -> Parser a`
55
- pfromPlutusDataPlutusType :: Term s (PData :--> PAsData a )
57
+ pfromPlutusDataPlutusType :: ClosedTerm (PData :--> PAsData a )
56
58
pfromPlutusDataPlutusType = plam punsafeCoerce
57
59
58
60
-- | Plutarch PTryFrom `fromPlutusData :: PlutusData -> Parser a`
59
- pfromPlutusDataPTryFrom :: (PTryFrom PData (PAsData a )) => Term s (PData :--> PAsData a )
60
- pfromPlutusDataPTryFrom = plam ptryFromData
61
+ pfromPlutusDataPTryFrom :: (PTryFrom PData (PAsData a )) => ClosedTerm (PData :--> PAsData a )
62
+ pfromPlutusDataPTryFrom = phoistAcyclic $ plam ptryFromData
61
63
where
62
64
ptryFromData :: forall a s . PTryFrom PData (PAsData a ) => Term s PData -> Term s (PAsData a )
63
65
ptryFromData pd = ptryFrom @ (PAsData a ) pd fst
64
66
65
67
-- | Plutarch `constrData :: IntE -> ListE PlutusData -> PlutusData`
66
- pconstrData :: Term s (PInteger :--> PBuiltinList PData :--> PData )
67
- pconstrData = plam $ \ ix args -> pforgetData $ pconstrBuiltin # ix # args
68
+ pconstrData :: ClosedTerm (PInteger :--> PBuiltinList PData :--> PData )
69
+ pconstrData = phoistAcyclic $ plam $ \ ix args -> pforgetData $ pconstrBuiltin # ix # args
68
70
69
71
-- | Haskell `constrData :: IntE -> ListE PlutusData -> PlutusData`
70
72
constrData :: Term s PInteger -> [Term s PData ] -> Term s PData
71
73
constrData ix args = pforgetData $ pconstrBuiltin # ix # toBuiltinList args
72
74
73
75
-- | Plutarch `integerData :: IntE -> PlutusData`
74
- pintegerData :: Term s (PInteger :--> PData )
75
- pintegerData = plam $ \ i -> ptoPlutusData # pdata i
76
+ pintegerData :: ClosedTerm (PInteger :--> PData )
77
+ pintegerData = phoistAcyclic $ plam $ \ i -> ptoPlutusData # pdata i
76
78
77
79
-- | Haskell `integerData :: IntE -> PlutusData`
78
80
integerData :: Term s PInteger -> Term s PData
79
81
integerData = toPlutusData . pdata
80
82
81
83
-- | Plutarch `listData :: ListE PlutusData -> PlutusData`
82
- plistData :: Term s (PBuiltinList PData :--> PData )
83
- plistData = plam $ pforgetData . pdata
84
+ plistData :: ClosedTerm (PBuiltinList PData :--> PData )
85
+ plistData = phoistAcyclic $ plam $ pforgetData . pdata
84
86
85
87
-- | Haskell `listData :: ListE PlutusData -> PlutusData`
86
88
listData :: [Term s PData ] -> Term s PData
@@ -92,8 +94,8 @@ toBuiltinList (x : xs) = pcon (PCons x (toBuiltinList xs))
92
94
93
95
-- | Plutarch `casePlutusData :: (Int -> [PlutusData] -> a) -> ([PlutusData] -> a) -> (Int -> a) -> (PlutusData -> a) -> PlutusData -> a`
94
96
pcasePlutusData ::
95
- Term s ((PInteger :--> PBuiltinList PData :--> a ) :--> (PBuiltinList PData :--> a ) :--> (PInteger :--> a ) :--> (PData :--> a ) :--> PData :--> a )
96
- pcasePlutusData = plam $ \ handleConstr handleList handleInt handleOther pd ->
97
+ ClosedTerm ((PInteger :--> PBuiltinList PData :--> a ) :--> (PBuiltinList PData :--> a ) :--> (PInteger :--> a ) :--> (PData :--> a ) :--> PData :--> a )
98
+ pcasePlutusData = phoistAcyclic $ plam $ \ handleConstr handleList handleInt handleOther pd ->
97
99
pforce $
98
100
pchooseData
99
101
# pd
@@ -114,13 +116,13 @@ casePlutusData ::
114
116
casePlutusData handleConstr handleList handleInt handleOther pd = pcasePlutusData # plam handleConstr # plam handleList # plam handleInt # plam handleOther # pd
115
117
116
118
-- | Plutarch `succeedParse :: a -> Parser a`
117
- psucceedParse :: Term s (a :--> a )
119
+ psucceedParse :: ClosedTerm (a :--> a )
118
120
psucceedParse = plam id
119
121
120
122
-- | Plutarch `failParse :: Parser a`
121
- pfailParse :: Term s a
123
+ pfailParse :: ClosedTerm a
122
124
pfailParse = perror
123
125
124
126
-- | Plutarch `bindParse :: Parser a -> (a -> Parser b) -> Parser b`
125
- pbindParse :: Term s (a :--> (a :--> b ) :--> b )
126
- pbindParse = plam (flip (#) )
127
+ pbindParse :: ClosedTerm (a :--> (a :--> b ) :--> b )
128
+ pbindParse = phoistAcyclic $ plam (flip (#) )
0 commit comments