Skip to content

Commit e4baf10

Browse files
committed
Fixes codegen bugs (printCaseE, .PlutusTx suffix)
1 parent 6efe519 commit e4baf10

File tree

18 files changed

+366
-301
lines changed

18 files changed

+366
-301
lines changed

lambda-buffers-codegen/data/plutustx-plutus.json

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -202,13 +202,6 @@
202202
]
203203
},
204204
"classesConfig": {
205-
"Prelude.Eq": [
206-
[
207-
"plutus-tx",
208-
"PlutusTx.Eq",
209-
"Eq"
210-
]
211-
],
212205
"Plutus.V1.PlutusData": [
213206
[
214207
"plutus-tx",

lambda-buffers-codegen/lambda-buffers-codegen.cabal

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,7 @@ library
115115
LambdaBuffers.Codegen.Haskell.Backend
116116
LambdaBuffers.Codegen.Haskell.Backend.Native
117117
LambdaBuffers.Codegen.Haskell.Backend.Native.Derive
118+
LambdaBuffers.Codegen.Haskell.Backend.Native.LamVal
118119
LambdaBuffers.Codegen.Haskell.Backend.Plutarch
119120
LambdaBuffers.Codegen.Haskell.Backend.Plutarch.Derive
120121
LambdaBuffers.Codegen.Haskell.Backend.Plutarch.LamVal

lambda-buffers-codegen/src/LambdaBuffers/Codegen/Haskell/Backend/Native.hs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ data NativeHaskellBackend
1313
instance IsHaskellBackend NativeHaskellBackend where
1414
type HaskellBackendContext NativeHaskellBackend = ()
1515
type HaskellBackendState NativeHaskellBackend = ()
16-
fromLbModuleName mn = Haskell.MkModuleName $ Text.intercalate "." ("LambdaBuffers" : [p ^. #name | p <- mn ^. #parts]) <> ".PlutusTx"
16+
fromLbModuleName mn = Haskell.MkModuleName $ Text.intercalate "." ("LambdaBuffers" : [p ^. #name | p <- mn ^. #parts])
1717
filepathFromLbModuleName mn = Text.unpack (Text.replace "." "/" (let Haskell.MkModuleName txt = fromLbModuleName @NativeHaskellBackend mn in txt)) <> ".hs"
1818
printImplementation = NativeHaskellBackend.hsClassImplPrinters
1919
printModule = Haskell.printModule

lambda-buffers-codegen/src/LambdaBuffers/Codegen/Haskell/Backend/Native/Derive.hs

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,13 @@ import Control.Lens ((^.))
44
import Data.Foldable (for_)
55
import Data.Map (Map)
66
import Data.Map qualified as Map
7+
import Data.Set (Set)
78
import LambdaBuffers.Codegen.Haskell.Backend (MonadHaskellBackend)
8-
import LambdaBuffers.Codegen.Haskell.Print.LamVal (printValueE)
9+
import LambdaBuffers.Codegen.Haskell.Backend.Native.LamVal qualified as Native
10+
import LambdaBuffers.Codegen.Haskell.Print.LamVal qualified as Haskell
911
import LambdaBuffers.Codegen.Haskell.Print.Syntax qualified as H
12+
import LambdaBuffers.Codegen.Haskell.Print.Syntax qualified as Haskell
13+
import LambdaBuffers.Codegen.LamVal qualified as Lv
1014
import LambdaBuffers.Codegen.LamVal.Eq (deriveEqImpl)
1115
import LambdaBuffers.Codegen.LamVal.Json (deriveFromJsonImpl, deriveToJsonImpl)
1216
import LambdaBuffers.Codegen.LamVal.MonadPrint qualified as LV
@@ -46,11 +50,14 @@ hsClassImplPrinters =
4650
)
4751
]
4852

53+
printValue :: (Lv.Ref -> Maybe Haskell.QValName) -> Lv.ValueE -> Either LV.PrintError (Doc ann, Set Haskell.QValName)
54+
printValue builtins valE = LV.runPrint (LV.Context builtins Native.lamValContext) (Haskell.printValueE valE)
55+
4956
eqClassMethodName :: H.ValueName
5057
eqClassMethodName = H.MkValueName "=="
5158

52-
lvEqBuiltinsBase :: LV.PrintRead (H.CabalPackageName, H.ModuleName, H.ValueName)
53-
lvEqBuiltinsBase = LV.MkPrintRead $ \(_ty, refName) ->
59+
lvEqBuiltinsBase :: Lv.Ref -> Maybe Haskell.QValName
60+
lvEqBuiltinsBase (_ty, refName) =
5461
Map.lookup refName $
5562
Map.fromList
5663
[ ("eq", (H.MkCabalPackageName "base", H.MkModuleName "Prelude", H.MkValueName "=="))
@@ -64,15 +71,15 @@ printDeriveEqBase mn iTyDefs mkInstanceDoc ty = do
6471
case deriveEqImpl mn iTyDefs ty of
6572
Left err -> Print.throwInternalError' (mn ^. #sourceInfo) ("Deriving Prelude.Eq LamVal implementation from a type failed with: " <> err ^. P.msg)
6673
Right valE -> do
67-
case LV.runPrint lvEqBuiltinsBase (printValueE valE) of
74+
case printValue lvEqBuiltinsBase valE of
6875
Left err -> Print.throwInternalError' (mn ^. #sourceInfo) ("Interpreting LamVal into Haskell failed with: " <> err ^. P.msg)
6976
Right (implDoc, imps) -> do
7077
instanceDoc <- mkInstanceDoc (printValueDef eqClassMethodName implDoc)
7178
for_ imps Print.importValue
7279
return instanceDoc
7380

74-
lvPlutusDataBuiltins :: LV.PrintRead H.QValName
75-
lvPlutusDataBuiltins = LV.MkPrintRead $ \(_ty, refName) ->
81+
lvPlutusDataBuiltins :: Lv.Ref -> Maybe Haskell.QValName
82+
lvPlutusDataBuiltins (_ty, refName) =
7683
Map.lookup refName $
7784
Map.fromList
7885
[ ("toPlutusData", (H.MkCabalPackageName "plutus-tx", H.MkModuleName "PlutusTx", H.MkValueName "toBuiltinData"))
@@ -94,7 +101,7 @@ printDeriveToPlutusData mn iTyDefs mkInstanceDoc ty = do
94101
case deriveToPlutusDataImpl mn iTyDefs ty of
95102
Left err -> Print.throwInternalError' (mn ^. #sourceInfo) ("Deriving Plutus.V1.PlutusData LamVal implementation from a type failed with: " <> err ^. P.msg)
96103
Right valE -> do
97-
case LV.runPrint lvPlutusDataBuiltins (printValueE valE) of
104+
case printValue lvPlutusDataBuiltins valE of
98105
Left err -> Print.throwInternalError' (mn ^. #sourceInfo) ("Interpreting LamVal into Haskell failed with: " <> err ^. P.msg)
99106
Right (implDoc, imps) -> do
100107
instanceDoc <- mkInstanceDoc (printValueDef toPlutusDataClassMethodName implDoc)
@@ -115,7 +122,7 @@ printDeriveFromPlutusData mn iTyDefs mkInstanceDoc ty = do
115122
case deriveFromPlutusDataImpl mn iTyDefs ty of
116123
Left err -> Print.throwInternalError' (mn ^. #sourceInfo) ("Deriving Plutus.V1.PlutusData LamVal implementation from a type failed with: " <> err ^. P.msg)
117124
Right valE -> do
118-
case LV.runPrint lvPlutusDataBuiltins (printValueE valE) of
125+
case printValue lvPlutusDataBuiltins valE of
119126
Left err -> Print.throwInternalError' (mn ^. #sourceInfo) ("Interpreting LamVal into Haskell failed with: " <> err ^. P.msg)
120127
Right (implDoc, imps) -> do
121128
instanceDoc <- mkInstanceDoc (printValueDef fromPlutusDataClassMethodName implDoc)
@@ -124,8 +131,8 @@ printDeriveFromPlutusData mn iTyDefs mkInstanceDoc ty = do
124131
return instanceDoc
125132

126133
-- | LambdaBuffers.Codegen.LamVal.Json specification printing
127-
lvJsonBuiltins :: LV.PrintRead H.QValName
128-
lvJsonBuiltins = LV.MkPrintRead $ \(_ty, refName) ->
134+
lvJsonBuiltins :: Lv.Ref -> Maybe Haskell.QValName
135+
lvJsonBuiltins (_ty, refName) =
129136
Map.lookup refName $
130137
Map.fromList
131138
[ ("toJson", (H.MkCabalPackageName "lbr-prelude", H.MkModuleName "LambdaBuffers.Runtime.Prelude", H.MkValueName "toJson"))
@@ -152,9 +159,9 @@ printDeriveJson :: MonadHaskellBackend t m => PC.ModuleName -> PC.TyDefs -> (Doc
152159
printDeriveJson mn iTyDefs mkInstanceDoc ty = do
153160
let resOrErr = do
154161
toJsonValE <- deriveToJsonImpl mn iTyDefs ty
155-
(toJsonImplDoc, impsA) <- LV.runPrint lvJsonBuiltins (printValueE toJsonValE)
162+
(toJsonImplDoc, impsA) <- printValue lvJsonBuiltins toJsonValE
156163
fromJsonValE <- deriveFromJsonImpl mn iTyDefs ty
157-
(fromJsonImplDoc, impsB) <- LV.runPrint lvJsonBuiltins (printValueE fromJsonValE)
164+
(fromJsonImplDoc, impsB) <- printValue lvJsonBuiltins fromJsonValE
158165
return (toJsonImplDoc, fromJsonImplDoc, impsA <> impsB)
159166

160167
(toJsonImplDoc, fromJsonImplDoc, imps) <- case resOrErr of
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
module LambdaBuffers.Codegen.Haskell.Backend.Native.LamVal (printCaseIntE, lamValContext) where
2+
3+
import Data.Traversable (for)
4+
import LambdaBuffers.Codegen.Haskell.Print.LamVal (HaskellLamValContext (HaskellLamValContext))
5+
import LambdaBuffers.Codegen.Haskell.Print.LamVal qualified as Haskell
6+
import LambdaBuffers.Codegen.LamVal qualified as LV
7+
import Prettyprinter (Doc, align, group, line, vsep, (<+>))
8+
9+
lamValContext :: HaskellLamValContext
10+
lamValContext = HaskellLamValContext {ctx'printCaseIntE = printCaseIntE}
11+
12+
printCaseIntE :: Haskell.HaskellLamValMonad m => LV.ValueE -> [(LV.ValueE, LV.ValueE)] -> (LV.ValueE -> LV.ValueE) -> m (Doc ann)
13+
printCaseIntE caseIntVal cases otherCase = do
14+
caseValDoc <- Haskell.printValueE caseIntVal
15+
caseDocs <-
16+
for
17+
cases
18+
( \(conditionVal, bodyVal) -> do
19+
conditionDoc <- Haskell.printValueE conditionVal
20+
bodyDoc <- Haskell.printValueE bodyVal
21+
return $ group $ conditionDoc <+> "->" <+> bodyDoc
22+
)
23+
otherDoc <- Haskell.printOtherCase otherCase
24+
return $ "ca" <> align ("se" <+> caseValDoc <+> "of" <> line <> vsep (caseDocs <> [otherDoc]))

lambda-buffers-codegen/src/LambdaBuffers/Codegen/Haskell/Backend/Plutarch/Derive.hs

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,16 @@ import Control.Lens ((^.))
44
import Data.Foldable (for_)
55
import Data.Map (Map)
66
import Data.Map qualified as Map
7+
import Data.Set (Set)
78
import Data.Text (Text)
89
import Data.Text qualified as Text
910
import LambdaBuffers.Codegen.Haskell.Backend (MonadHaskellBackend)
1011
import LambdaBuffers.Codegen.Haskell.Backend.Plutarch.LamVal qualified as PlLamVal
1112
import LambdaBuffers.Codegen.Haskell.Backend.Plutarch.Refs qualified as PlRefs
1213
import LambdaBuffers.Codegen.Haskell.Print.InstanceDef qualified as Haskell
13-
import LambdaBuffers.Codegen.Haskell.Print.LamVal qualified as Haskell
1414
import LambdaBuffers.Codegen.Haskell.Print.Syntax qualified as Haskell
1515
import LambdaBuffers.Codegen.Haskell.Print.TyDef qualified as Haskell
16+
import LambdaBuffers.Codegen.LamVal qualified as LV
1617
import LambdaBuffers.Codegen.LamVal.MonadPrint qualified as LV
1718
import LambdaBuffers.Codegen.LamVal.PlutusData (deriveFromPlutusDataImplPlutarch, deriveToPlutusDataImplPlutarch)
1819
import LambdaBuffers.Codegen.Print qualified as Print
@@ -54,6 +55,9 @@ hsClassImplPrinters =
5455
useVal :: MonadHaskellBackend t m => Haskell.QValName -> m (Doc ann)
5556
useVal qvn = Print.importValue qvn >> return (Haskell.printHsQValName qvn)
5657

58+
printValue :: (LV.Ref -> Maybe Haskell.QValName) -> LV.ValueE -> Either LV.PrintError (Doc ann, Set Haskell.QValName)
59+
printValue builtins valE = LV.runPrint (LV.Context builtins ()) (PlLamVal.printValueE valE)
60+
5761
{- | Deriving PEq.
5862
5963
NOTE(bladyjoker): Doesn't derive the implementation but only uses the underlying PData representation for equality.
@@ -111,8 +115,8 @@ printDerivePIsData _mn _iTyDefs mkInstanceDoc _ty = do
111115
pfromDataImpl = printValueDef (Haskell.MkValueName "pfromDataImpl") punsafeCoerceDoc
112116
mkInstanceDoc (align $ vsep [pdataImpl, pfromDataImpl])
113117

114-
lvPlutusDataBuiltinsForPlutusType :: LV.PrintRead Haskell.QValName
115-
lvPlutusDataBuiltinsForPlutusType = LV.MkPrintRead $ \(_ty, refName) ->
118+
lvPlutusDataBuiltinsForPlutusType :: LV.Ref -> Maybe Haskell.QValName
119+
lvPlutusDataBuiltinsForPlutusType (_ty, refName) =
116120
Map.lookup refName $
117121
Map.fromList
118122
[ ("toPlutusData", (Haskell.MkCabalPackageName "lbr-plutarch", Haskell.MkModuleName "LambdaBuffers.Runtime.Plutarch.LamVal", Haskell.MkValueName "toPlutusData"))
@@ -138,8 +142,8 @@ printDerivePlutusType mn iTyDefs _mkInstanceDoc ty = do
138142
do
139143
toDataE <- deriveToPlutusDataImplPlutarch mn iTyDefs ty
140144
fromDataE <- deriveFromPlutusDataImplPlutarch mn iTyDefs ty
141-
(pconImplDoc, imps) <- LV.runPrint lvPlutusDataBuiltinsForPlutusType (Haskell.printValueE toDataE)
142-
(pmatchImplDoc, imps') <- LV.runPrint lvPlutusDataBuiltinsForPlutusType (PlLamVal.printValueE fromDataE)
145+
(pconImplDoc, imps) <- printValue lvPlutusDataBuiltinsForPlutusType toDataE
146+
(pmatchImplDoc, imps') <- printValue lvPlutusDataBuiltinsForPlutusType fromDataE
143147
let implDoc =
144148
align $
145149
vsep
@@ -201,8 +205,8 @@ printPlutusTypeInstanceDef ty implDefDoc = do
201205
printValueDef :: Haskell.ValueName -> Doc ann -> Doc ann
202206
printValueDef valName valDoc = Haskell.printHsValName valName <+> equals <+> valDoc
203207

204-
lvPlutusDataBuiltinsForPTryFrom :: LV.PrintRead Haskell.QValName
205-
lvPlutusDataBuiltinsForPTryFrom = LV.MkPrintRead $ \(_ty, refName) ->
208+
lvPlutusDataBuiltinsForPTryFrom :: LV.Ref -> Maybe Haskell.QValName
209+
lvPlutusDataBuiltinsForPTryFrom (_ty, refName) =
206210
Map.lookup refName $
207211
Map.fromList
208212
[ ("toPlutusData", (Haskell.MkCabalPackageName "lbr-plutarch", Haskell.MkModuleName "LambdaBuffers.Runtime.Plutarch.LamVal", Haskell.MkValueName "toPlutusData"))
@@ -233,7 +237,7 @@ printDerivePTryFrom mn iTyDefs _mkInstanceDoc ty = do
233237
pappDoc <- useVal PlRefs.pappQValName
234238
let resOrErr = do
235239
fromDataE <- deriveFromPlutusDataImplPlutarch mn iTyDefs ty
236-
(ptryFromImplDoc, imps) <- LV.runPrint lvPlutusDataBuiltinsForPTryFrom (PlLamVal.printValueE fromDataE)
240+
(ptryFromImplDoc, imps) <- printValue lvPlutusDataBuiltinsForPTryFrom fromDataE
237241
return
238242
( align $ printValueDef PlRefs.ptryFromMethod (parens $ "\\pd f -> f" <+> parens (parens pappDoc <+> parens ptryFromImplDoc <+> "pd" <+> "," <+> "()"))
239243
, imps

lambda-buffers-codegen/src/LambdaBuffers/Codegen/Haskell/Backend/Plutarch/LamVal.hs

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,10 @@ import LambdaBuffers.ProtoCompat qualified as PC
1515
import Prettyprinter (Doc, Pretty (pretty), align, backslash, dquotes, group, hardline, hsep, line, parens, vsep, (<+>))
1616
import Proto.Codegen_Fields qualified as P
1717

18-
throwInternalError :: MonadPrint m => String -> m a
19-
throwInternalError msg = throwError $ defMessage & P.msg .~ "[LambdaBuffers.Codegen.Plutarch] " <> Text.pack msg
18+
type PlutarchLamValMonad m = LV.MonadPrint m HsSyntax.QValName ()
2019

21-
type MonadPrint m = LV.MonadPrint m HsSyntax.QValName
20+
throwInternalError :: PlutarchLamValMonad m => String -> m a
21+
throwInternalError msg = throwError $ defMessage & P.msg .~ "[LambdaBuffers.Codegen.Plutarch] " <> Text.pack msg
2222

2323
withInfo :: PC.InfoLessC b => PC.InfoLess b -> b
2424
withInfo x = PC.withInfoLess x id
@@ -66,7 +66,7 @@ translates to Plutarch
6666
plam (\x -> <expression over x>)
6767
```
6868
-}
69-
printLamE :: MonadPrint m => (LV.ValueE -> LV.ValueE) -> m (Doc ann)
69+
printLamE :: PlutarchLamValMonad m => (LV.ValueE -> LV.ValueE) -> m (Doc ann)
7070
printLamE lamVal = do
7171
arg <- LV.freshArg
7272
bodyDoc <- printValueE (lamVal arg)
@@ -86,7 +86,7 @@ translates to Plutarch
8686
(#) (funVal) (argVal)
8787
```
8888
-}
89-
printAppE :: MonadPrint m => LV.ValueE -> LV.ValueE -> m (Doc ann)
89+
printAppE :: PlutarchLamValMonad m => LV.ValueE -> LV.ValueE -> m (Doc ann)
9090
printAppE funVal argVal = do
9191
funDoc <- printValueE funVal
9292
argDoc <- printValueE argVal
@@ -111,7 +111,7 @@ pcon (Foo'Bar (x) (y))
111111
112112
TODO(bladyjoker): Add import for the `Foo'Bar` constructor value reference.
113113
-}
114-
printCtorE :: MonadPrint m => LV.QCtor -> [LV.ValueE] -> m (Doc ann)
114+
printCtorE :: PlutarchLamValMonad m => LV.QCtor -> [LV.ValueE] -> m (Doc ann)
115115
printCtorE _qctor@((_, tyN), (ctorN, _)) prodVals = do
116116
prodDocs <- for prodVals (fmap parens . printValueE)
117117
let ctorNDoc = HsSyntax.printCtorName (withInfo tyN) (withInfo ctorN)
@@ -147,7 +147,7 @@ pmatch foo (\x -> case x of
147147
)
148148
```
149149
-}
150-
printCaseE :: MonadPrint m => LV.QSum -> LV.ValueE -> ((LV.Ctor, [LV.ValueE]) -> LV.ValueE) -> m (Doc ann)
150+
printCaseE :: PlutarchLamValMonad m => LV.QSum -> LV.ValueE -> ((LV.Ctor, [LV.ValueE]) -> LV.ValueE) -> m (Doc ann)
151151
printCaseE _qsum@(qtyN, sumTy) caseVal ctorCont = do
152152
caseValDoc <- printValueE caseVal
153153
ctorCaseDocs <-
@@ -163,7 +163,7 @@ printCaseE _qsum@(qtyN, sumTy) caseVal ctorCont = do
163163
let casesDoc = "ca" <> align ("se" <+> pmatchContArgDoc <+> "of" <> line <> ctorCaseDocs)
164164
return $ pmatchDoc <+> caseValDoc <+> parens (backslash <> pmatchContArgDoc <+> "->" <+> casesDoc)
165165

166-
printCtorCase :: MonadPrint m => PC.QTyName -> ((LV.Ctor, [LV.ValueE]) -> LV.ValueE) -> LV.Ctor -> m (Doc ann)
166+
printCtorCase :: PlutarchLamValMonad m => PC.QTyName -> ((LV.Ctor, [LV.ValueE]) -> LV.ValueE) -> LV.Ctor -> m (Doc ann)
167167
printCtorCase (_, tyn) ctorCont ctor@(ctorN, fields) = do
168168
args <- for fields (const LV.freshArg)
169169
argDocs <- for args printValueE
@@ -192,7 +192,7 @@ pcon (Foo (x) (y))
192192
193193
TODO(bladyjoker): Add Product constructor import.
194194
-}
195-
printProductE :: MonadPrint m => LV.QProduct -> [LV.ValueE] -> m (Doc ann)
195+
printProductE :: PlutarchLamValMonad m => LV.QProduct -> [LV.ValueE] -> m (Doc ann)
196196
printProductE ((_, tyN), _) vals = do
197197
fieldDocs <- for vals (fmap parens . printValueE)
198198
let ctorDoc = HsSyntax.printMkCtor (withInfo tyN)
@@ -217,7 +217,7 @@ translates to Plutarch
217217
pmatch foo (\(Foo x y) -> <expression on x and y>)
218218
```
219219
-}
220-
printLetE :: MonadPrint m => LV.QProduct -> LV.ValueE -> ([LV.ValueE] -> LV.ValueE) -> m (Doc ann)
220+
printLetE :: PlutarchLamValMonad m => LV.QProduct -> LV.ValueE -> ([LV.ValueE] -> LV.ValueE) -> m (Doc ann)
221221
printLetE ((_, tyN), fields) prodVal letCont = do
222222
prodValDoc <- printValueE prodVal
223223
args <- for fields (const LV.freshArg)
@@ -240,7 +240,7 @@ translates to Plutarch
240240
pcon (PCons x (PCons y PNil))
241241
```
242242
-}
243-
printListE :: MonadPrint m => [LV.ValueE] -> m (Doc ann)
243+
printListE :: PlutarchLamValMonad m => [LV.ValueE] -> m (Doc ann)
244244
printListE [] = do
245245
pconDoc <- HsSyntax.printHsQValName <$> LV.importValue pconRef
246246
pnilDoc <- HsSyntax.printHsQValName <$> LV.importValue pnilRef
@@ -291,13 +291,13 @@ case xs of
291291
h4:t4 -> d xs -- OTHER
292292
```
293293
-}
294-
printCaseListE :: MonadPrint m => LV.ValueE -> [(Int, [LV.ValueE] -> LV.ValueE)] -> (LV.ValueE -> LV.ValueE) -> m (Doc ann)
294+
printCaseListE :: PlutarchLamValMonad m => LV.ValueE -> [(Int, [LV.ValueE] -> LV.ValueE)] -> (LV.ValueE -> LV.ValueE) -> m (Doc ann)
295295
printCaseListE xs cases otherCase = do
296296
let maxLength = maximum $ fst <$> cases
297297
otherCaseDoc <- printValueE (otherCase xs)
298298
printCaseListE' xs cases otherCaseDoc 0 maxLength []
299299

300-
printCaseListE' :: MonadPrint m => LV.ValueE -> [(Int, [LV.ValueE] -> LV.ValueE)] -> Doc ann -> Int -> Int -> [LV.ValueE] -> m (Doc ann)
300+
printCaseListE' :: PlutarchLamValMonad m => LV.ValueE -> [(Int, [LV.ValueE] -> LV.ValueE)] -> Doc ann -> Int -> Int -> [LV.ValueE] -> m (Doc ann)
301301
printCaseListE' _xs _cases otherCaseDoc currentLength maxLength _args | currentLength > maxLength = return otherCaseDoc
302302
printCaseListE' xs cases otherCaseDoc currentLength maxLength args = do
303303
pnilRefDoc <- HsSyntax.printHsQValName <$> LV.importValue pnilRef
@@ -345,7 +345,7 @@ pconstant 1
345345
pconstant (-1)
346346
```
347347
-}
348-
printIntE :: MonadPrint m => Int -> m (Doc ann)
348+
printIntE :: PlutarchLamValMonad m => Int -> m (Doc ann)
349349
printIntE i = do
350350
pconstantRefDoc <- HsSyntax.printHsQValName <$> LV.importValue pconstantRef
351351
return $ pconstantRefDoc <+> if i < 0 then parens (pretty i) else pretty i
@@ -362,7 +362,7 @@ translates to Plutarch
362362
pif ((#==) (x) (pconstant 0)) <A> (pif ((#==) (x) (pconstant 123)) <B> <C>)
363363
```
364364
-}
365-
printCaseIntE :: MonadPrint m => LV.ValueE -> [(LV.ValueE, LV.ValueE)] -> (LV.ValueE -> LV.ValueE) -> m (Doc ann)
365+
printCaseIntE :: PlutarchLamValMonad m => LV.ValueE -> [(LV.ValueE, LV.ValueE)] -> (LV.ValueE -> LV.ValueE) -> m (Doc ann)
366366
printCaseIntE caseIntVal [] otherCase = printValueE (otherCase caseIntVal) -- TODO(bladyjoker): Why is this a function and not just a ValueE?
367367
printCaseIntE caseIntVal ((iVal, bodyVal) : cases) otherCase = do
368368
pifRefDoc <- HsSyntax.printHsQValName <$> LV.importValue pifRef
@@ -385,7 +385,7 @@ translates to Plutarch
385385
pconstant "Dražen Popović"
386386
```
387387
-}
388-
printTextE :: MonadPrint m => Text.Text -> m (Doc ann)
388+
printTextE :: PlutarchLamValMonad m => Text.Text -> m (Doc ann)
389389
printTextE t = do
390390
pconstantRefDoc <- HsSyntax.printHsQValName <$> LV.importValue pconstantRef
391391
return $ pconstantRefDoc <+> dquotes (pretty t)
@@ -402,7 +402,7 @@ translates to Plutarch
402402
pif ((#==) (x) (pconstant "a")) <A> (pif ((#==) (x) (pconstant "b")) <B> <C>)
403403
```
404404
-}
405-
printCaseTextE :: MonadPrint m => LV.ValueE -> [(LV.ValueE, LV.ValueE)] -> (LV.ValueE -> LV.ValueE) -> m (Doc ann)
405+
printCaseTextE :: PlutarchLamValMonad m => LV.ValueE -> [(LV.ValueE, LV.ValueE)] -> (LV.ValueE -> LV.ValueE) -> m (Doc ann)
406406
printCaseTextE caseTxtVal [] otherCase = printValueE (otherCase caseTxtVal) -- TODO(bladyjoker): Why is this a function and not just a ValueE?
407407
printCaseTextE caseTxtVal ((txtVal, bodyVal) : cases) otherCase = do
408408
pifRefDoc <- HsSyntax.printHsQValName <$> LV.importValue pifRef
@@ -413,12 +413,12 @@ printCaseTextE caseTxtVal ((txtVal, bodyVal) : cases) otherCase = do
413413
elseDoc <- printCaseIntE caseTxtVal cases otherCase
414414
return $ pifRefDoc <+> parens (peqRefDoc <+> parens caseTxtValDoc <+> parens txtValDoc) <+> parens bodyValDoc <+> parens elseDoc
415415

416-
printRefE :: MonadPrint m => LV.Ref -> m (Doc ann)
416+
printRefE :: PlutarchLamValMonad m => LV.Ref -> m (Doc ann)
417417
printRefE ref = do
418418
qvn <- LV.resolveRef ref
419419
HsSyntax.printHsQValName <$> LV.importValue qvn
420420

421-
printValueE :: MonadPrint m => LV.ValueE -> m (Doc ann)
421+
printValueE :: PlutarchLamValMonad m => LV.ValueE -> m (Doc ann)
422422
printValueE (LV.VarE v) = return $ pretty v
423423
printValueE (LV.RefE ref) = printRefE ref
424424
printValueE (LV.LamE lamVal) = printLamE lamVal

0 commit comments

Comments
 (0)