diff --git a/CHANGELOG.md b/CHANGELOG.md index 7b6adad..79304f1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). respectively from `Covenant.Test` * Add read-only synonyms `Id` and `Arg` for the two data types with the same name in `Covenant.ASG` +* Modify `App` to contain the calculated fully-concrete function type of the fn being applied ## 1.3.0 -- 2025-10-07 diff --git a/src/Covenant/ASG.hs b/src/Covenant/ASG.hs index 359832d..3f6977b 100644 --- a/src/Covenant/ASG.hs +++ b/src/Covenant/ASG.hs @@ -254,7 +254,7 @@ import Covenant.Prim ) import Covenant.Type ( CompT (Comp0), - CompTBody (ReturnT), + CompTBody (ArgsAndResult, ReturnT), Constructor, ConstructorName, DataDeclaration (OpaqueData), @@ -477,13 +477,15 @@ pattern Lit c <- LitInternal c -- or -- * 'Data.Wedge.There', meaning \'a concrete type\'. -- --- @since 1.3.0 +-- The final CompT is the concretified function type, which is necessary for codegen. +-- @since wip pattern App :: Id -> Vector Ref -> Vector (Wedge BoundTyVar (ValT Void)) -> + CompT AbstractTy -> ValNodeInfo -pattern App f args instTys <- AppInternal f args instTys +pattern App f args instTys concreteFnTy <- AppInternal f args instTys concreteFnTy -- | Wrap a computation into a value (essentially delaying it). -- @@ -755,7 +757,7 @@ err = refTo AnError -- * \'Use this type variable in our scope\', specified as 'Data.Wedge.Here'. -- * \'Use this concrete type\', specified as 'Data.Wedge.There'. -- --- @since 1.2.0 +-- @since wip app :: forall (m :: Type -> Type). (MonadHashCons Id ASGNode m, MonadError CovenantTypeError m, MonadReader ASGEnv m) => @@ -777,16 +779,43 @@ app fId argRefs instTys = do if numInstantiations /= numVars then throwError $ WrongNumInstantiationsInApp renamedFT numVars numInstantiations else do - instantiatedFT <- instantiate subs renamedFT renamedArgs <- traverse renameArg argRefs + concretifiedFT <- concretifyFT renamedFT renamedArgs + instantiatedFT <- instantiate subs concretifiedFT tyDict <- asks (view #datatypeInfo) result <- either (throwError . UnificationError) pure $ checkApp tyDict instantiatedFT (Vector.toList renamedArgs) restored <- undoRenameM result + unRenamedFnTy <- undoRenameCompT instantiatedFT checkEncodingWithInfo tyDict restored - refTo . AValNode restored $ AppInternal fId argRefs instTys + refTo . AValNode restored $ AppInternal fId argRefs instTys unRenamedFnTy ValNodeType t -> throwError . ApplyToValType $ t ErrorNodeType -> throwError ApplyToError where + renameSubs :: [(Index "tyvar", ValT AbstractTy)] -> m [(Index "tyvar", ValT Renamed)] + renameSubs subs = + askScope >>= \scope -> case traverse (traverse (runRenameM scope . renameValT)) subs of + Left err' -> throwError $ FailedToRenameInstantiation err' + Right res -> pure res + + concretifyFT :: CompT Renamed -> Vector (Maybe (ValT Renamed)) -> m (CompT Renamed) + concretifyFT fn@(CompT _ body) argValTypes = do + argSubs <- getArgSubs body argValTypes + instantiate (Map.toList argSubs) fn + + getArgSubs :: CompTBody Renamed -> Vector (Maybe (ValT Renamed)) -> m (Map (Index "tyvar") (ValT Renamed)) + getArgSubs (ArgsAndResult args _) argValTypes = + liftUnifyM + . fmap (Vector.foldMap id) + $ Vector.zipWithM argSubHelper args argValTypes + where + argSubHelper :: ValT Renamed -> Maybe (ValT Renamed) -> UnifyM (Map (Index "tyvar") (ValT Renamed)) + argSubHelper fromFn = \case + Nothing -> pure Map.empty + Just fromArg -> unify fromFn fromArg + + -- NOTE: The helper function below only concerns instantiations that result from + -- explicit type applications (via the third argument to `app`). + -- mkSubstitutions :: Vector (Wedge BoundTyVar (ValT Void)) -> [(Index "tyvar", ValT AbstractTy)] mkSubstitutions = Vector.ifoldl' @@ -800,12 +829,6 @@ app fId argRefs instTys = do ) [] - renameSubs :: [(Index "tyvar", ValT AbstractTy)] -> m [(Index "tyvar", ValT Renamed)] - renameSubs subs = - askScope >>= \scope -> case traverse (traverse (runRenameM scope . renameValT)) subs of - Left err' -> throwError $ FailedToRenameInstantiation err' - Right res -> pure res - instantiate :: [(Index "tyvar", ValT Renamed)] -> CompT Renamed -> m (CompT Renamed) instantiate [] fn = pure fn instantiate subs fn = do @@ -1345,6 +1368,17 @@ undoRenameM val = do Left err' -> throwError $ UndoRenameFailure err' Right renamed -> pure renamed +undoRenameCompT :: + forall (m :: Type -> Type). + (MonadError CovenantTypeError m, MonadReader ASGEnv m) => + CompT Renamed -> + m (CompT AbstractTy) +undoRenameCompT comp = + undoRenameM (ThunkT comp) >>= \case + ThunkT res -> pure res + -- This really should be impossible, not just unlikely. + _other -> error "Undoing renaming on a CompT resulting in something other than a thunk, which should be totally impossible" + askScope :: forall (m :: Type -> Type). (MonadReader ASGEnv m) => diff --git a/src/Covenant/Data.hs b/src/Covenant/Data.hs index 18c11bb..8f79dbb 100644 --- a/src/Covenant/Data.hs +++ b/src/Covenant/Data.hs @@ -122,6 +122,8 @@ data BBFError data DatatypeInfo (var :: Type) = DatatypeInfo { _originalDecl :: DataDeclaration var, + -- The second element of the tuple here is the BB form of the Base functor + -- (this is what we actually care about most of the time) _baseFunctorStuff :: Maybe (DataDeclaration var, ValT var), -- NOTE: The ONLY type that won't have a BB form is `Void` (or something isomorphic to it) _bbForm :: Maybe (ValT var), diff --git a/src/Covenant/Internal/Term.hs b/src/Covenant/Internal/Term.hs index c3280ea..87b342f 100644 --- a/src/Covenant/Internal/Term.hs +++ b/src/Covenant/Internal/Term.hs @@ -416,8 +416,9 @@ data CompNodeInfo -- @since 1.0.0 data ValNodeInfo = LitInternal AConstant - | -- | @since 1.3.0 - AppInternal Id (Vector Ref) (Vector (Wedge BoundTyVar (ValT Void))) + | -- | @since wip + -- The CompT is the "fully concretified" function type + AppInternal Id (Vector Ref) (Vector (Wedge BoundTyVar (ValT Void))) (CompT AbstractTy) | ThunkInternal Id | -- | @since 1.1.0 CataInternal Ref Ref diff --git a/src/Covenant/JSON.hs b/src/Covenant/JSON.hs index 497685e..ee21da5 100644 --- a/src/Covenant/JSON.hs +++ b/src/Covenant/JSON.hs @@ -407,7 +407,7 @@ validateCompilationUnit' (CompilationUnit datatypes asg _) = do ForceInternal ref -> checkNode "force" $ force ref AValNode _ valInfo -> case valInfo of LitInternal aConstant -> checkNode "Lit" (lit aConstant) - AppInternal fId argRefs instTys -> checkNode "App" (app fId argRefs instTys) + AppInternal fId argRefs instTys _ -> checkNode "App" (app fId argRefs instTys) ThunkInternal i -> checkNode "Thunk" (thunk i) CataInternal r1 r2 -> checkNode "Cata" (cata r1 r2) DataConstructorInternal tn cn args -> checkNode "DataConstructor" (dataConstructor tn cn args) @@ -838,7 +838,7 @@ decodeAConstant = Serializes as a sum type without named fields: {tag: "Lit", fields: [a]} - | {tag: "App", fields: [a,b]} + | {tag: "App", fields: [a,b,c,d]} | {tag: "Thunk",fields: [a]} | {tag: "Cata", fields: [a,b]} | {tag: "DataConstructor", fields: [a,b,c]} @@ -850,12 +850,13 @@ decodeAConstant = encodeValNodeInfo :: ValNodeInfo -> Encoding encodeValNodeInfo = \case LitInternal aconst -> taggedFields "Lit" [encodeAConstant aconst] - AppInternal f args instTys -> + AppInternal f args instTys fTy -> taggedFields "App" [ encodeId f, list encodeRef . toList $ args, - list encodeInstTy . toList $ instTys + list encodeInstTy . toList $ instTys, + encodeCompT encodeAbstractTy fTy ] ThunkInternal f -> taggedFields "Thunk" [encodeId f] CataInternal r1 r2 -> taggedFields "Cata" [encodeRef r1, encodeRef r2] @@ -880,7 +881,8 @@ decodeValNodeInfo = f <- withIndex 0 decodeId fieldsArr args <- withIndex 1 (withArray "App args" (traverse decodeRef)) fieldsArr instTys <- withIndex 2 (withArray "App instTys" (traverse decodeInstTy)) fieldsArr - pure $ AppInternal f args instTys, + fTy <- withIndex 3 (decodeCompT decodeAbstractTy) fieldsArr + pure $ AppInternal f args instTys fTy, "Thunk" :=> withField0 (fmap ThunkInternal . decodeId), "Cata" :=> withFields diff --git a/src/Covenant/Zipper.hs b/src/Covenant/Zipper.hs index 582ffd1..25f4e34 100644 --- a/src/Covenant/Zipper.hs +++ b/src/Covenant/Zipper.hs @@ -226,7 +226,7 @@ downStep zs@(ZipperState walkedOff g parentLevels currentLevel) = Force r -> next . Tape [] r $ [] _ -> miss AValNode _ info -> case info of - App f args _ -> next . Tape [] (AnId f) . toList $ args + App f args _ _ -> next . Tape [] (AnId f) . toList $ args Thunk f -> next . Tape [] (AnId f) $ [] Cata alg x -> next . Tape [] alg $ [x] DataConstructor _ _ args -> case args of diff --git a/test/json-conformance/conformance_case_1.json b/test/json-conformance/conformance_case_1.json index 5d08e2d..de40357 100644 --- a/test/json-conformance/conformance_case_1.json +++ b/test/json-conformance/conformance_case_1.json @@ -1,1789 +1 @@ -{ - "datatypes": [ - { - "tag": "DataDeclaration", - "fields": { - "datatypeName": { - "tyName": "Maybe" - }, - "datatypeBinders": 1, - "datatypeConstructors": [ - { - "constructorName": "Nothing", - "constructorArgs": [] - }, - { - "constructorName": "Just", - "constructorArgs": [ - { - "tag": "Abstraction", - "fields": [ - [ - 0, - 0 - ] - ] - } - ] - } - ], - "datatypeEncoding": { - "tag": "SOP", - "fields": [] - } - } - }, - { - "tag": "DataDeclaration", - "fields": { - "datatypeName": { - "tyName": "Result" - }, - "datatypeBinders": 2, - "datatypeConstructors": [ - { - "constructorName": "Exception", - "constructorArgs": [ - { - "tag": "Abstraction", - "fields": [ - [ - 0, - 0 - ] - ] - } - ] - }, - { - "constructorName": "OK", - "constructorArgs": [ - { - "tag": "Abstraction", - "fields": [ - [ - 0, - 1 - ] - ] - } - ] - } - ], - "datatypeEncoding": { - "tag": "PlutusData", - "fields": [ - { - "tag": "ConstrData" - } - ] - } - } - }, - { - "tag": "DataDeclaration", - "fields": { - "datatypeName": { - "tyName": "Pair" - }, - "datatypeBinders": 2, - "datatypeConstructors": [ - { - "constructorName": "Pair", - "constructorArgs": [ - { - "tag": "Abstraction", - "fields": [ - [ - 0, - 0 - ] - ] - }, - { - "tag": "Abstraction", - "fields": [ - [ - 0, - 1 - ] - ] - } - ] - } - ], - "datatypeEncoding": { - "tag": "BuiltinStrategy", - "fields": [ - { - "tag": "InternalPairStrat" - } - ] - } - } - }, - { - "tag": "DataDeclaration", - "fields": { - "datatypeName": { - "tyName": "List" - }, - "datatypeBinders": 1, - "datatypeConstructors": [ - { - "constructorName": "Nil", - "constructorArgs": [] - }, - { - "constructorName": "Cons", - "constructorArgs": [ - { - "tag": "Abstraction", - "fields": [ - [ - 0, - 0 - ] - ] - }, - { - "tag": "Datatype", - "fields": [ - { - "tyName": "List" - }, - [ - { - "tag": "Abstraction", - "fields": [ - [ - 0, - 0 - ] - ] - } - ] - ] - } - ] - } - ], - "datatypeEncoding": { - "tag": "BuiltinStrategy", - "fields": [ - { - "tag": "InternalListStrat" - } - ] - } - } - } - ], - "asg": [ - { - "key": 27, - "value": { - "tag": "ACompNode", - "fields": [ - [ - 0, - [ - { - "tag": "Datatype", - "fields": [ - { - "tyName": "Maybe" - }, - [ - { - "tag": "Datatype", - "fields": [ - { - "tyName": "Pair" - }, - [ - { - "tag": "BuiltinFlat", - "fields": [ - { - "tag": "IntegerT" - } - ] - }, - { - "tag": "BuiltinFlat", - "fields": [ - { - "tag": "IntegerT" - } - ] - } - ] - ] - } - ] - ] - }, - { - "tag": "Datatype", - "fields": [ - { - "tyName": "List" - }, - [ - { - "tag": "BuiltinFlat", - "fields": [ - { - "tag": "IntegerT" - } - ] - } - ] - ] - }, - { - "tag": "Datatype", - "fields": [ - { - "tyName": "Result" - }, - [ - { - "tag": "BuiltinFlat", - "fields": [ - { - "tag": "StringT" - } - ] - }, - { - "tag": "BuiltinFlat", - "fields": [ - { - "tag": "IntegerT" - } - ] - } - ] - ] - } - ] - ], - { - "tag": "LamInternal", - "fields": [ - { - "tag": "AnId", - "fields": [ - 26 - ] - } - ] - } - ] - } - }, - { - "key": 26, - "value": { - "tag": "AValNode", - "fields": [ - { - "tag": "Datatype", - "fields": [ - { - "tyName": "Result" - }, - [ - { - "tag": "BuiltinFlat", - "fields": [ - { - "tag": "StringT" - } - ] - }, - { - "tag": "BuiltinFlat", - "fields": [ - { - "tag": "IntegerT" - } - ] - } - ] - ] - }, - { - "tag": "Match", - "fields": [ - { - "tag": "AnArg", - "fields": [ - { - "argDeBruijn": 0, - "argIndex": 0, - "argType": { - "tag": "Datatype", - "fields": [ - { - "tyName": "Maybe" - }, - [ - { - "tag": "Datatype", - "fields": [ - { - "tyName": "Pair" - }, - [ - { - "tag": "BuiltinFlat", - "fields": [ - { - "tag": "IntegerT" - } - ] - }, - { - "tag": "BuiltinFlat", - "fields": [ - { - "tag": "IntegerT" - } - ] - } - ] - ] - } - ] - ] - } - } - ] - }, - [ - { - "tag": "AnId", - "fields": [ - 5 - ] - }, - { - "tag": "AnId", - "fields": [ - 25 - ] - } - ] - ] - } - ] - } - }, - { - "key": 25, - "value": { - "tag": "AValNode", - "fields": [ - { - "tag": "ThunkT", - "fields": [ - [ - 0, - [ - { - "tag": "Datatype", - "fields": [ - { - "tyName": "Pair" - }, - [ - { - "tag": "BuiltinFlat", - "fields": [ - { - "tag": "IntegerT" - } - ] - }, - { - "tag": "BuiltinFlat", - "fields": [ - { - "tag": "IntegerT" - } - ] - } - ] - ] - }, - { - "tag": "Datatype", - "fields": [ - { - "tyName": "Result" - }, - [ - { - "tag": "BuiltinFlat", - "fields": [ - { - "tag": "StringT" - } - ] - }, - { - "tag": "BuiltinFlat", - "fields": [ - { - "tag": "IntegerT" - } - ] - } - ] - ] - } - ] - ] - ] - }, - { - "tag": "Thunk", - "fields": [ - 24 - ] - } - ] - } - }, - { - "key": 24, - "value": { - "tag": "ACompNode", - "fields": [ - [ - 0, - [ - { - "tag": "Datatype", - "fields": [ - { - "tyName": "Pair" - }, - [ - { - "tag": "BuiltinFlat", - "fields": [ - { - "tag": "IntegerT" - } - ] - }, - { - "tag": "BuiltinFlat", - "fields": [ - { - "tag": "IntegerT" - } - ] - } - ] - ] - }, - { - "tag": "Datatype", - "fields": [ - { - "tyName": "Result" - }, - [ - { - "tag": "BuiltinFlat", - "fields": [ - { - "tag": "StringT" - } - ] - }, - { - "tag": "BuiltinFlat", - "fields": [ - { - "tag": "IntegerT" - } - ] - } - ] - ] - } - ] - ], - { - "tag": "LamInternal", - "fields": [ - { - "tag": "AnId", - "fields": [ - 23 - ] - } - ] - } - ] - } - }, - { - "key": 23, - "value": { - "tag": "AValNode", - "fields": [ - { - "tag": "Datatype", - "fields": [ - { - "tyName": "Result" - }, - [ - { - "tag": "BuiltinFlat", - "fields": [ - { - "tag": "StringT" - } - ] - }, - { - "tag": "BuiltinFlat", - "fields": [ - { - "tag": "IntegerT" - } - ] - } - ] - ] - }, - { - "tag": "Match", - "fields": [ - { - "tag": "AnArg", - "fields": [ - { - "argDeBruijn": 0, - "argIndex": 0, - "argType": { - "tag": "Datatype", - "fields": [ - { - "tyName": "Pair" - }, - [ - { - "tag": "BuiltinFlat", - "fields": [ - { - "tag": "IntegerT" - } - ] - }, - { - "tag": "BuiltinFlat", - "fields": [ - { - "tag": "IntegerT" - } - ] - } - ] - ] - } - } - ] - }, - [ - { - "tag": "AnId", - "fields": [ - 22 - ] - } - ] - ] - } - ] - } - }, - { - "key": 22, - "value": { - "tag": "AValNode", - "fields": [ - { - "tag": "ThunkT", - "fields": [ - [ - 0, - [ - { - "tag": "BuiltinFlat", - "fields": [ - { - "tag": "IntegerT" - } - ] - }, - { - "tag": "BuiltinFlat", - "fields": [ - { - "tag": "IntegerT" - } - ] - }, - { - "tag": "Datatype", - "fields": [ - { - "tyName": "Result" - }, - [ - { - "tag": "BuiltinFlat", - "fields": [ - { - "tag": "StringT" - } - ] - }, - { - "tag": "BuiltinFlat", - "fields": [ - { - "tag": "IntegerT" - } - ] - } - ] - ] - } - ] - ] - ] - }, - { - "tag": "Thunk", - "fields": [ - 21 - ] - } - ] - } - }, - { - "key": 21, - "value": { - "tag": "ACompNode", - "fields": [ - [ - 0, - [ - { - "tag": "BuiltinFlat", - "fields": [ - { - "tag": "IntegerT" - } - ] - }, - { - "tag": "BuiltinFlat", - "fields": [ - { - "tag": "IntegerT" - } - ] - }, - { - "tag": "Datatype", - "fields": [ - { - "tyName": "Result" - }, - [ - { - "tag": "BuiltinFlat", - "fields": [ - { - "tag": "StringT" - } - ] - }, - { - "tag": "BuiltinFlat", - "fields": [ - { - "tag": "IntegerT" - } - ] - } - ] - ] - } - ] - ], - { - "tag": "LamInternal", - "fields": [ - { - "tag": "AnId", - "fields": [ - 20 - ] - } - ] - } - ] - } - }, - { - "key": 20, - "value": { - "tag": "AValNode", - "fields": [ - { - "tag": "Datatype", - "fields": [ - { - "tyName": "Result" - }, - [ - { - "tag": "BuiltinFlat", - "fields": [ - { - "tag": "StringT" - } - ] - }, - { - "tag": "BuiltinFlat", - "fields": [ - { - "tag": "IntegerT" - } - ] - } - ] - ] - }, - { - "tag": "App", - "fields": [ - 19, - [], - [ - { - "tag": "There", - "fields": [ - { - "tag": "BuiltinFlat", - "fields": [ - { - "tag": "StringT" - } - ] - } - ] - } - ] - ] - } - ] - } - }, - { - "key": 19, - "value": { - "tag": "ACompNode", - "fields": [ - [ - 1, - [ - { - "tag": "Datatype", - "fields": [ - { - "tyName": "Result" - }, - [ - { - "tag": "Abstraction", - "fields": [ - [ - 0, - 0 - ] - ] - }, - { - "tag": "BuiltinFlat", - "fields": [ - { - "tag": "IntegerT" - } - ] - } - ] - ] - } - ] - ], - { - "tag": "ForceInternal", - "fields": [ - { - "tag": "AnId", - "fields": [ - 18 - ] - } - ] - } - ] - } - }, - { - "key": 18, - "value": { - "tag": "AValNode", - "fields": [ - { - "tag": "ThunkT", - "fields": [ - [ - 1, - [ - { - "tag": "Datatype", - "fields": [ - { - "tyName": "Result" - }, - [ - { - "tag": "Abstraction", - "fields": [ - [ - 0, - 0 - ] - ] - }, - { - "tag": "BuiltinFlat", - "fields": [ - { - "tag": "IntegerT" - } - ] - } - ] - ] - } - ] - ] - ] - }, - { - "tag": "DataConstructor", - "fields": [ - { - "tyName": "Result" - }, - "OK", - [ - { - "tag": "AnId", - "fields": [ - 17 - ] - } - ] - ] - } - ] - } - }, - { - "key": 17, - "value": { - "tag": "AValNode", - "fields": [ - { - "tag": "BuiltinFlat", - "fields": [ - { - "tag": "IntegerT" - } - ] - }, - { - "tag": "App", - "fields": [ - 6, - [ - { - "tag": "AnId", - "fields": [ - 7 - ] - }, - { - "tag": "AnId", - "fields": [ - 16 - ] - } - ], - [] - ] - } - ] - } - }, - { - "key": 16, - "value": { - "tag": "AValNode", - "fields": [ - { - "tag": "BuiltinFlat", - "fields": [ - { - "tag": "IntegerT" - } - ] - }, - { - "tag": "Cata", - "fields": [ - { - "tag": "AnId", - "fields": [ - 15 - ] - }, - { - "tag": "AnArg", - "fields": [ - { - "argDeBruijn": 2, - "argIndex": 1, - "argType": { - "tag": "Datatype", - "fields": [ - { - "tyName": "List" - }, - [ - { - "tag": "BuiltinFlat", - "fields": [ - { - "tag": "IntegerT" - } - ] - } - ] - ] - } - } - ] - } - ] - } - ] - } - }, - { - "key": 15, - "value": { - "tag": "AValNode", - "fields": [ - { - "tag": "ThunkT", - "fields": [ - [ - 0, - [ - { - "tag": "Datatype", - "fields": [ - { - "baseFunctorOf": "List" - }, - [ - { - "tag": "BuiltinFlat", - "fields": [ - { - "tag": "IntegerT" - } - ] - }, - { - "tag": "BuiltinFlat", - "fields": [ - { - "tag": "IntegerT" - } - ] - } - ] - ] - }, - { - "tag": "BuiltinFlat", - "fields": [ - { - "tag": "IntegerT" - } - ] - } - ] - ] - ] - }, - { - "tag": "Thunk", - "fields": [ - 14 - ] - } - ] - } - }, - { - "key": 14, - "value": { - "tag": "ACompNode", - "fields": [ - [ - 0, - [ - { - "tag": "Datatype", - "fields": [ - { - "baseFunctorOf": "List" - }, - [ - { - "tag": "BuiltinFlat", - "fields": [ - { - "tag": "IntegerT" - } - ] - }, - { - "tag": "BuiltinFlat", - "fields": [ - { - "tag": "IntegerT" - } - ] - } - ] - ] - }, - { - "tag": "BuiltinFlat", - "fields": [ - { - "tag": "IntegerT" - } - ] - } - ] - ], - { - "tag": "LamInternal", - "fields": [ - { - "tag": "AnId", - "fields": [ - 13 - ] - } - ] - } - ] - } - }, - { - "key": 13, - "value": { - "tag": "AValNode", - "fields": [ - { - "tag": "BuiltinFlat", - "fields": [ - { - "tag": "IntegerT" - } - ] - }, - { - "tag": "Match", - "fields": [ - { - "tag": "AnArg", - "fields": [ - { - "argDeBruijn": 0, - "argIndex": 0, - "argType": { - "tag": "Datatype", - "fields": [ - { - "baseFunctorOf": "List" - }, - [ - { - "tag": "BuiltinFlat", - "fields": [ - { - "tag": "IntegerT" - } - ] - }, - { - "tag": "BuiltinFlat", - "fields": [ - { - "tag": "IntegerT" - } - ] - } - ] - ] - } - } - ] - }, - [ - { - "tag": "AnId", - "fields": [ - 10 - ] - }, - { - "tag": "AnId", - "fields": [ - 12 - ] - } - ] - ] - } - ] - } - }, - { - "key": 12, - "value": { - "tag": "AValNode", - "fields": [ - { - "tag": "ThunkT", - "fields": [ - [ - 0, - [ - { - "tag": "BuiltinFlat", - "fields": [ - { - "tag": "IntegerT" - } - ] - }, - { - "tag": "BuiltinFlat", - "fields": [ - { - "tag": "IntegerT" - } - ] - }, - { - "tag": "BuiltinFlat", - "fields": [ - { - "tag": "IntegerT" - } - ] - } - ] - ] - ] - }, - { - "tag": "Thunk", - "fields": [ - 11 - ] - } - ] - } - }, - { - "key": 11, - "value": { - "tag": "ACompNode", - "fields": [ - [ - 0, - [ - { - "tag": "BuiltinFlat", - "fields": [ - { - "tag": "IntegerT" - } - ] - }, - { - "tag": "BuiltinFlat", - "fields": [ - { - "tag": "IntegerT" - } - ] - }, - { - "tag": "BuiltinFlat", - "fields": [ - { - "tag": "IntegerT" - } - ] - } - ] - ], - { - "tag": "LamInternal", - "fields": [ - { - "tag": "AnId", - "fields": [ - 7 - ] - } - ] - } - ] - } - }, - { - "key": 10, - "value": { - "tag": "AValNode", - "fields": [ - { - "tag": "ThunkT", - "fields": [ - [ - 0, - [ - { - "tag": "BuiltinFlat", - "fields": [ - { - "tag": "IntegerT" - } - ] - } - ] - ] - ] - }, - { - "tag": "Thunk", - "fields": [ - 9 - ] - } - ] - } - }, - { - "key": 9, - "value": { - "tag": "ACompNode", - "fields": [ - [ - 0, - [ - { - "tag": "BuiltinFlat", - "fields": [ - { - "tag": "IntegerT" - } - ] - } - ] - ], - { - "tag": "LamInternal", - "fields": [ - { - "tag": "AnId", - "fields": [ - 8 - ] - } - ] - } - ] - } - }, - { - "key": 8, - "value": { - "tag": "AValNode", - "fields": [ - { - "tag": "BuiltinFlat", - "fields": [ - { - "tag": "IntegerT" - } - ] - }, - { - "tag": "Lit", - "fields": [ - { - "tag": "AnInteger", - "fields": [ - 0 - ] - } - ] - } - ] - } - }, - { - "key": 7, - "value": { - "tag": "AValNode", - "fields": [ - { - "tag": "BuiltinFlat", - "fields": [ - { - "tag": "IntegerT" - } - ] - }, - { - "tag": "App", - "fields": [ - 6, - [ - { - "tag": "AnArg", - "fields": [ - { - "argDeBruijn": 0, - "argIndex": 0, - "argType": { - "tag": "BuiltinFlat", - "fields": [ - { - "tag": "IntegerT" - } - ] - } - } - ] - }, - { - "tag": "AnArg", - "fields": [ - { - "argDeBruijn": 0, - "argIndex": 1, - "argType": { - "tag": "BuiltinFlat", - "fields": [ - { - "tag": "IntegerT" - } - ] - } - } - ] - } - ], - [] - ] - } - ] - } - }, - { - "key": 6, - "value": { - "tag": "ACompNode", - "fields": [ - [ - 0, - [ - { - "tag": "BuiltinFlat", - "fields": [ - { - "tag": "IntegerT" - } - ] - }, - { - "tag": "BuiltinFlat", - "fields": [ - { - "tag": "IntegerT" - } - ] - }, - { - "tag": "BuiltinFlat", - "fields": [ - { - "tag": "IntegerT" - } - ] - } - ] - ], - { - "tag": "Builtin2Internal", - "fields": [ - { - "tag": "AddInteger" - } - ] - } - ] - } - }, - { - "key": 5, - "value": { - "tag": "AValNode", - "fields": [ - { - "tag": "ThunkT", - "fields": [ - [ - 0, - [ - { - "tag": "Datatype", - "fields": [ - { - "tyName": "Result" - }, - [ - { - "tag": "BuiltinFlat", - "fields": [ - { - "tag": "StringT" - } - ] - }, - { - "tag": "BuiltinFlat", - "fields": [ - { - "tag": "IntegerT" - } - ] - } - ] - ] - } - ] - ] - ] - }, - { - "tag": "Thunk", - "fields": [ - 4 - ] - } - ] - } - }, - { - "key": 4, - "value": { - "tag": "ACompNode", - "fields": [ - [ - 0, - [ - { - "tag": "Datatype", - "fields": [ - { - "tyName": "Result" - }, - [ - { - "tag": "BuiltinFlat", - "fields": [ - { - "tag": "StringT" - } - ] - }, - { - "tag": "BuiltinFlat", - "fields": [ - { - "tag": "IntegerT" - } - ] - } - ] - ] - } - ] - ], - { - "tag": "LamInternal", - "fields": [ - { - "tag": "AnId", - "fields": [ - 3 - ] - } - ] - } - ] - } - }, - { - "key": 3, - "value": { - "tag": "AValNode", - "fields": [ - { - "tag": "Datatype", - "fields": [ - { - "tyName": "Result" - }, - [ - { - "tag": "BuiltinFlat", - "fields": [ - { - "tag": "StringT" - } - ] - }, - { - "tag": "BuiltinFlat", - "fields": [ - { - "tag": "IntegerT" - } - ] - } - ] - ] - }, - { - "tag": "App", - "fields": [ - 2, - [], - [ - { - "tag": "There", - "fields": [ - { - "tag": "BuiltinFlat", - "fields": [ - { - "tag": "IntegerT" - } - ] - } - ] - } - ] - ] - } - ] - } - }, - { - "key": 2, - "value": { - "tag": "ACompNode", - "fields": [ - [ - 1, - [ - { - "tag": "Datatype", - "fields": [ - { - "tyName": "Result" - }, - [ - { - "tag": "BuiltinFlat", - "fields": [ - { - "tag": "StringT" - } - ] - }, - { - "tag": "Abstraction", - "fields": [ - [ - 0, - 0 - ] - ] - } - ] - ] - } - ] - ], - { - "tag": "ForceInternal", - "fields": [ - { - "tag": "AnId", - "fields": [ - 1 - ] - } - ] - } - ] - } - }, - { - "key": 1, - "value": { - "tag": "AValNode", - "fields": [ - { - "tag": "ThunkT", - "fields": [ - [ - 1, - [ - { - "tag": "Datatype", - "fields": [ - { - "tyName": "Result" - }, - [ - { - "tag": "BuiltinFlat", - "fields": [ - { - "tag": "StringT" - } - ] - }, - { - "tag": "Abstraction", - "fields": [ - [ - 0, - 0 - ] - ] - } - ] - ] - } - ] - ] - ] - }, - { - "tag": "DataConstructor", - "fields": [ - { - "tyName": "Result" - }, - "Exception", - [ - { - "tag": "AnId", - "fields": [ - 0 - ] - } - ] - ] - } - ] - } - }, - { - "key": 0, - "value": { - "tag": "AValNode", - "fields": [ - { - "tag": "BuiltinFlat", - "fields": [ - { - "tag": "StringT" - } - ] - }, - { - "tag": "Lit", - "fields": [ - { - "tag": "AString", - "fields": [ - "Input is nothing" - ] - } - ] - } - ] - } - } - ], - "version": { - "major": 0, - "minor": 0 - } -} +{"datatypes":[{"tag":"DataDeclaration","fields":{"datatypeName":{"tyName":"Maybe"},"datatypeBinders":1,"datatypeConstructors":[{"constructorName":"Nothing","constructorArgs":[]},{"constructorName":"Just","constructorArgs":[{"tag":"Abstraction","fields":[[0,0]]}]}],"datatypeEncoding":{"tag":"SOP","fields":[]}}},{"tag":"DataDeclaration","fields":{"datatypeName":{"tyName":"Result"},"datatypeBinders":2,"datatypeConstructors":[{"constructorName":"Exception","constructorArgs":[{"tag":"Abstraction","fields":[[0,0]]}]},{"constructorName":"OK","constructorArgs":[{"tag":"Abstraction","fields":[[0,1]]}]}],"datatypeEncoding":{"tag":"PlutusData","fields":[{"tag":"ConstrData"}]}}},{"tag":"DataDeclaration","fields":{"datatypeName":{"tyName":"Pair"},"datatypeBinders":2,"datatypeConstructors":[{"constructorName":"Pair","constructorArgs":[{"tag":"Abstraction","fields":[[0,0]]},{"tag":"Abstraction","fields":[[0,1]]}]}],"datatypeEncoding":{"tag":"BuiltinStrategy","fields":[{"tag":"InternalPairStrat"}]}}},{"tag":"DataDeclaration","fields":{"datatypeName":{"tyName":"List"},"datatypeBinders":1,"datatypeConstructors":[{"constructorName":"Nil","constructorArgs":[]},{"constructorName":"Cons","constructorArgs":[{"tag":"Abstraction","fields":[[0,0]]},{"tag":"Datatype","fields":[{"tyName":"List"},[{"tag":"Abstraction","fields":[[0,0]]}]]}]}],"datatypeEncoding":{"tag":"BuiltinStrategy","fields":[{"tag":"InternalListStrat"}]}}}],"asg":[{"key":27,"value":{"tag":"ACompNode","fields":[[0,[{"tag":"Datatype","fields":[{"tyName":"Maybe"},[{"tag":"Datatype","fields":[{"tyName":"Pair"},[{"tag":"BuiltinFlat","fields":[{"tag":"IntegerT"}]},{"tag":"BuiltinFlat","fields":[{"tag":"IntegerT"}]}]]}]]},{"tag":"Datatype","fields":[{"tyName":"List"},[{"tag":"BuiltinFlat","fields":[{"tag":"IntegerT"}]}]]},{"tag":"Datatype","fields":[{"tyName":"Result"},[{"tag":"BuiltinFlat","fields":[{"tag":"StringT"}]},{"tag":"BuiltinFlat","fields":[{"tag":"IntegerT"}]}]]}]],{"tag":"LamInternal","fields":[{"tag":"AnId","fields":[26]}]}]}},{"key":26,"value":{"tag":"AValNode","fields":[{"tag":"Datatype","fields":[{"tyName":"Result"},[{"tag":"BuiltinFlat","fields":[{"tag":"StringT"}]},{"tag":"BuiltinFlat","fields":[{"tag":"IntegerT"}]}]]},{"tag":"Match","fields":[{"tag":"AnArg","fields":[{"argDeBruijn":0,"argIndex":0,"argType":{"tag":"Datatype","fields":[{"tyName":"Maybe"},[{"tag":"Datatype","fields":[{"tyName":"Pair"},[{"tag":"BuiltinFlat","fields":[{"tag":"IntegerT"}]},{"tag":"BuiltinFlat","fields":[{"tag":"IntegerT"}]}]]}]]}}]},[{"tag":"AnId","fields":[5]},{"tag":"AnId","fields":[25]}]]}]}},{"key":25,"value":{"tag":"AValNode","fields":[{"tag":"ThunkT","fields":[[0,[{"tag":"Datatype","fields":[{"tyName":"Pair"},[{"tag":"BuiltinFlat","fields":[{"tag":"IntegerT"}]},{"tag":"BuiltinFlat","fields":[{"tag":"IntegerT"}]}]]},{"tag":"Datatype","fields":[{"tyName":"Result"},[{"tag":"BuiltinFlat","fields":[{"tag":"StringT"}]},{"tag":"BuiltinFlat","fields":[{"tag":"IntegerT"}]}]]}]]]},{"tag":"Thunk","fields":[24]}]}},{"key":24,"value":{"tag":"ACompNode","fields":[[0,[{"tag":"Datatype","fields":[{"tyName":"Pair"},[{"tag":"BuiltinFlat","fields":[{"tag":"IntegerT"}]},{"tag":"BuiltinFlat","fields":[{"tag":"IntegerT"}]}]]},{"tag":"Datatype","fields":[{"tyName":"Result"},[{"tag":"BuiltinFlat","fields":[{"tag":"StringT"}]},{"tag":"BuiltinFlat","fields":[{"tag":"IntegerT"}]}]]}]],{"tag":"LamInternal","fields":[{"tag":"AnId","fields":[23]}]}]}},{"key":23,"value":{"tag":"AValNode","fields":[{"tag":"Datatype","fields":[{"tyName":"Result"},[{"tag":"BuiltinFlat","fields":[{"tag":"StringT"}]},{"tag":"BuiltinFlat","fields":[{"tag":"IntegerT"}]}]]},{"tag":"Match","fields":[{"tag":"AnArg","fields":[{"argDeBruijn":0,"argIndex":0,"argType":{"tag":"Datatype","fields":[{"tyName":"Pair"},[{"tag":"BuiltinFlat","fields":[{"tag":"IntegerT"}]},{"tag":"BuiltinFlat","fields":[{"tag":"IntegerT"}]}]]}}]},[{"tag":"AnId","fields":[22]}]]}]}},{"key":22,"value":{"tag":"AValNode","fields":[{"tag":"ThunkT","fields":[[0,[{"tag":"BuiltinFlat","fields":[{"tag":"IntegerT"}]},{"tag":"BuiltinFlat","fields":[{"tag":"IntegerT"}]},{"tag":"Datatype","fields":[{"tyName":"Result"},[{"tag":"BuiltinFlat","fields":[{"tag":"StringT"}]},{"tag":"BuiltinFlat","fields":[{"tag":"IntegerT"}]}]]}]]]},{"tag":"Thunk","fields":[21]}]}},{"key":21,"value":{"tag":"ACompNode","fields":[[0,[{"tag":"BuiltinFlat","fields":[{"tag":"IntegerT"}]},{"tag":"BuiltinFlat","fields":[{"tag":"IntegerT"}]},{"tag":"Datatype","fields":[{"tyName":"Result"},[{"tag":"BuiltinFlat","fields":[{"tag":"StringT"}]},{"tag":"BuiltinFlat","fields":[{"tag":"IntegerT"}]}]]}]],{"tag":"LamInternal","fields":[{"tag":"AnId","fields":[20]}]}]}},{"key":20,"value":{"tag":"AValNode","fields":[{"tag":"Datatype","fields":[{"tyName":"Result"},[{"tag":"BuiltinFlat","fields":[{"tag":"StringT"}]},{"tag":"BuiltinFlat","fields":[{"tag":"IntegerT"}]}]]},{"tag":"App","fields":[19,[],[{"tag":"There","fields":[{"tag":"BuiltinFlat","fields":[{"tag":"StringT"}]}]}],[0,[{"tag":"Datatype","fields":[{"tyName":"Result"},[{"tag":"BuiltinFlat","fields":[{"tag":"StringT"}]},{"tag":"BuiltinFlat","fields":[{"tag":"IntegerT"}]}]]}]]]}]}},{"key":19,"value":{"tag":"ACompNode","fields":[[1,[{"tag":"Datatype","fields":[{"tyName":"Result"},[{"tag":"Abstraction","fields":[[0,0]]},{"tag":"BuiltinFlat","fields":[{"tag":"IntegerT"}]}]]}]],{"tag":"ForceInternal","fields":[{"tag":"AnId","fields":[18]}]}]}},{"key":18,"value":{"tag":"AValNode","fields":[{"tag":"ThunkT","fields":[[1,[{"tag":"Datatype","fields":[{"tyName":"Result"},[{"tag":"Abstraction","fields":[[0,0]]},{"tag":"BuiltinFlat","fields":[{"tag":"IntegerT"}]}]]}]]]},{"tag":"DataConstructor","fields":[{"tyName":"Result"},"OK",[{"tag":"AnId","fields":[17]}]]}]}},{"key":17,"value":{"tag":"AValNode","fields":[{"tag":"BuiltinFlat","fields":[{"tag":"IntegerT"}]},{"tag":"App","fields":[6,[{"tag":"AnId","fields":[7]},{"tag":"AnId","fields":[16]}],[],[0,[{"tag":"BuiltinFlat","fields":[{"tag":"IntegerT"}]},{"tag":"BuiltinFlat","fields":[{"tag":"IntegerT"}]},{"tag":"BuiltinFlat","fields":[{"tag":"IntegerT"}]}]]]}]}},{"key":16,"value":{"tag":"AValNode","fields":[{"tag":"BuiltinFlat","fields":[{"tag":"IntegerT"}]},{"tag":"Cata","fields":[{"tag":"AnId","fields":[15]},{"tag":"AnArg","fields":[{"argDeBruijn":2,"argIndex":1,"argType":{"tag":"Datatype","fields":[{"tyName":"List"},[{"tag":"BuiltinFlat","fields":[{"tag":"IntegerT"}]}]]}}]}]}]}},{"key":15,"value":{"tag":"AValNode","fields":[{"tag":"ThunkT","fields":[[0,[{"tag":"Datatype","fields":[{"baseFunctorOf":"List"},[{"tag":"BuiltinFlat","fields":[{"tag":"IntegerT"}]},{"tag":"BuiltinFlat","fields":[{"tag":"IntegerT"}]}]]},{"tag":"BuiltinFlat","fields":[{"tag":"IntegerT"}]}]]]},{"tag":"Thunk","fields":[14]}]}},{"key":14,"value":{"tag":"ACompNode","fields":[[0,[{"tag":"Datatype","fields":[{"baseFunctorOf":"List"},[{"tag":"BuiltinFlat","fields":[{"tag":"IntegerT"}]},{"tag":"BuiltinFlat","fields":[{"tag":"IntegerT"}]}]]},{"tag":"BuiltinFlat","fields":[{"tag":"IntegerT"}]}]],{"tag":"LamInternal","fields":[{"tag":"AnId","fields":[13]}]}]}},{"key":13,"value":{"tag":"AValNode","fields":[{"tag":"BuiltinFlat","fields":[{"tag":"IntegerT"}]},{"tag":"Match","fields":[{"tag":"AnArg","fields":[{"argDeBruijn":0,"argIndex":0,"argType":{"tag":"Datatype","fields":[{"baseFunctorOf":"List"},[{"tag":"BuiltinFlat","fields":[{"tag":"IntegerT"}]},{"tag":"BuiltinFlat","fields":[{"tag":"IntegerT"}]}]]}}]},[{"tag":"AnId","fields":[10]},{"tag":"AnId","fields":[12]}]]}]}},{"key":12,"value":{"tag":"AValNode","fields":[{"tag":"ThunkT","fields":[[0,[{"tag":"BuiltinFlat","fields":[{"tag":"IntegerT"}]},{"tag":"BuiltinFlat","fields":[{"tag":"IntegerT"}]},{"tag":"BuiltinFlat","fields":[{"tag":"IntegerT"}]}]]]},{"tag":"Thunk","fields":[11]}]}},{"key":11,"value":{"tag":"ACompNode","fields":[[0,[{"tag":"BuiltinFlat","fields":[{"tag":"IntegerT"}]},{"tag":"BuiltinFlat","fields":[{"tag":"IntegerT"}]},{"tag":"BuiltinFlat","fields":[{"tag":"IntegerT"}]}]],{"tag":"LamInternal","fields":[{"tag":"AnId","fields":[7]}]}]}},{"key":10,"value":{"tag":"AValNode","fields":[{"tag":"ThunkT","fields":[[0,[{"tag":"BuiltinFlat","fields":[{"tag":"IntegerT"}]}]]]},{"tag":"Thunk","fields":[9]}]}},{"key":9,"value":{"tag":"ACompNode","fields":[[0,[{"tag":"BuiltinFlat","fields":[{"tag":"IntegerT"}]}]],{"tag":"LamInternal","fields":[{"tag":"AnId","fields":[8]}]}]}},{"key":8,"value":{"tag":"AValNode","fields":[{"tag":"BuiltinFlat","fields":[{"tag":"IntegerT"}]},{"tag":"Lit","fields":[{"tag":"AnInteger","fields":[0]}]}]}},{"key":7,"value":{"tag":"AValNode","fields":[{"tag":"BuiltinFlat","fields":[{"tag":"IntegerT"}]},{"tag":"App","fields":[6,[{"tag":"AnArg","fields":[{"argDeBruijn":0,"argIndex":0,"argType":{"tag":"BuiltinFlat","fields":[{"tag":"IntegerT"}]}}]},{"tag":"AnArg","fields":[{"argDeBruijn":0,"argIndex":1,"argType":{"tag":"BuiltinFlat","fields":[{"tag":"IntegerT"}]}}]}],[],[0,[{"tag":"BuiltinFlat","fields":[{"tag":"IntegerT"}]},{"tag":"BuiltinFlat","fields":[{"tag":"IntegerT"}]},{"tag":"BuiltinFlat","fields":[{"tag":"IntegerT"}]}]]]}]}},{"key":6,"value":{"tag":"ACompNode","fields":[[0,[{"tag":"BuiltinFlat","fields":[{"tag":"IntegerT"}]},{"tag":"BuiltinFlat","fields":[{"tag":"IntegerT"}]},{"tag":"BuiltinFlat","fields":[{"tag":"IntegerT"}]}]],{"tag":"Builtin2Internal","fields":[{"tag":"AddInteger"}]}]}},{"key":5,"value":{"tag":"AValNode","fields":[{"tag":"ThunkT","fields":[[0,[{"tag":"Datatype","fields":[{"tyName":"Result"},[{"tag":"BuiltinFlat","fields":[{"tag":"StringT"}]},{"tag":"BuiltinFlat","fields":[{"tag":"IntegerT"}]}]]}]]]},{"tag":"Thunk","fields":[4]}]}},{"key":4,"value":{"tag":"ACompNode","fields":[[0,[{"tag":"Datatype","fields":[{"tyName":"Result"},[{"tag":"BuiltinFlat","fields":[{"tag":"StringT"}]},{"tag":"BuiltinFlat","fields":[{"tag":"IntegerT"}]}]]}]],{"tag":"LamInternal","fields":[{"tag":"AnId","fields":[3]}]}]}},{"key":3,"value":{"tag":"AValNode","fields":[{"tag":"Datatype","fields":[{"tyName":"Result"},[{"tag":"BuiltinFlat","fields":[{"tag":"StringT"}]},{"tag":"BuiltinFlat","fields":[{"tag":"IntegerT"}]}]]},{"tag":"App","fields":[2,[],[{"tag":"There","fields":[{"tag":"BuiltinFlat","fields":[{"tag":"IntegerT"}]}]}],[0,[{"tag":"Datatype","fields":[{"tyName":"Result"},[{"tag":"BuiltinFlat","fields":[{"tag":"StringT"}]},{"tag":"BuiltinFlat","fields":[{"tag":"IntegerT"}]}]]}]]]}]}},{"key":2,"value":{"tag":"ACompNode","fields":[[1,[{"tag":"Datatype","fields":[{"tyName":"Result"},[{"tag":"BuiltinFlat","fields":[{"tag":"StringT"}]},{"tag":"Abstraction","fields":[[0,0]]}]]}]],{"tag":"ForceInternal","fields":[{"tag":"AnId","fields":[1]}]}]}},{"key":1,"value":{"tag":"AValNode","fields":[{"tag":"ThunkT","fields":[[1,[{"tag":"Datatype","fields":[{"tyName":"Result"},[{"tag":"BuiltinFlat","fields":[{"tag":"StringT"}]},{"tag":"Abstraction","fields":[[0,0]]}]]}]]]},{"tag":"DataConstructor","fields":[{"tyName":"Result"},"Exception",[{"tag":"AnId","fields":[0]}]]}]}},{"key":0,"value":{"tag":"AValNode","fields":[{"tag":"BuiltinFlat","fields":[{"tag":"StringT"}]},{"tag":"Lit","fields":[{"tag":"AString","fields":["Input is nothing"]}]}]}}],"version":{"major":0,"minor":1}} \ No newline at end of file diff --git a/test/json-conformance/conformance_case_2.json b/test/json-conformance/conformance_case_2.json index 78e9d75..151d0f9 100644 --- a/test/json-conformance/conformance_case_2.json +++ b/test/json-conformance/conformance_case_2.json @@ -1,1213 +1 @@ -{ - "datatypes": [ - { - "tag": "DataDeclaration", - "fields": { - "datatypeName": { - "tyName": "Void" - }, - "datatypeBinders": 0, - "datatypeConstructors": [], - "datatypeEncoding": { - "tag": "SOP", - "fields": [] - } - } - }, - { - "tag": "OpaqueData", - "fields": { - "datatypeName": { - "tyName": "Foo" - }, - "opaquePlutusConstructors": [ - { - "tag": "PlutusI" - } - ] - } - }, - { - "tag": "DataDeclaration", - "fields": { - "datatypeName": { - "tyName": "Maybe" - }, - "datatypeBinders": 1, - "datatypeConstructors": [ - { - "constructorName": "Nothing", - "constructorArgs": [] - }, - { - "constructorName": "Just", - "constructorArgs": [ - { - "tag": "Abstraction", - "fields": [ - [ - 0, - 0 - ] - ] - } - ] - } - ], - "datatypeEncoding": { - "tag": "SOP", - "fields": [] - } - } - }, - { - "tag": "DataDeclaration", - "fields": { - "datatypeName": { - "tyName": "Pair" - }, - "datatypeBinders": 2, - "datatypeConstructors": [ - { - "constructorName": "Pair", - "constructorArgs": [ - { - "tag": "Abstraction", - "fields": [ - [ - 0, - 0 - ] - ] - }, - { - "tag": "Abstraction", - "fields": [ - [ - 0, - 1 - ] - ] - } - ] - } - ], - "datatypeEncoding": { - "tag": "BuiltinStrategy", - "fields": [ - { - "tag": "InternalPairStrat" - } - ] - } - } - } - ], - "asg": [ - { - "key": 20, - "value": { - "tag": "ACompNode", - "fields": [ - [ - 0, - [ - { - "tag": "Datatype", - "fields": [ - { - "tyName": "Maybe" - }, - [ - { - "tag": "Datatype", - "fields": [ - { - "tyName": "Pair" - }, - [ - { - "tag": "BuiltinFlat", - "fields": [ - { - "tag": "IntegerT" - } - ] - }, - { - "tag": "Datatype", - "fields": [ - { - "tyName": "Foo" - }, - [] - ] - } - ] - ] - } - ] - ] - }, - { - "tag": "Datatype", - "fields": [ - { - "tyName": "Maybe" - }, - [ - { - "tag": "BuiltinFlat", - "fields": [ - { - "tag": "BoolT" - } - ] - } - ] - ] - } - ] - ], - { - "tag": "LamInternal", - "fields": [ - { - "tag": "AnId", - "fields": [ - 19 - ] - } - ] - } - ] - } - }, - { - "key": 19, - "value": { - "tag": "AValNode", - "fields": [ - { - "tag": "Datatype", - "fields": [ - { - "tyName": "Maybe" - }, - [ - { - "tag": "BuiltinFlat", - "fields": [ - { - "tag": "BoolT" - } - ] - } - ] - ] - }, - { - "tag": "Match", - "fields": [ - { - "tag": "AnArg", - "fields": [ - { - "argDeBruijn": 0, - "argIndex": 0, - "argType": { - "tag": "Datatype", - "fields": [ - { - "tyName": "Maybe" - }, - [ - { - "tag": "Datatype", - "fields": [ - { - "tyName": "Pair" - }, - [ - { - "tag": "BuiltinFlat", - "fields": [ - { - "tag": "IntegerT" - } - ] - }, - { - "tag": "Datatype", - "fields": [ - { - "tyName": "Foo" - }, - [] - ] - } - ] - ] - } - ] - ] - } - } - ] - }, - [ - { - "tag": "AnId", - "fields": [ - 5 - ] - }, - { - "tag": "AnId", - "fields": [ - 18 - ] - } - ] - ] - } - ] - } - }, - { - "key": 18, - "value": { - "tag": "AValNode", - "fields": [ - { - "tag": "ThunkT", - "fields": [ - [ - 0, - [ - { - "tag": "Datatype", - "fields": [ - { - "tyName": "Pair" - }, - [ - { - "tag": "BuiltinFlat", - "fields": [ - { - "tag": "IntegerT" - } - ] - }, - { - "tag": "Datatype", - "fields": [ - { - "tyName": "Foo" - }, - [] - ] - } - ] - ] - }, - { - "tag": "Datatype", - "fields": [ - { - "tyName": "Maybe" - }, - [ - { - "tag": "BuiltinFlat", - "fields": [ - { - "tag": "BoolT" - } - ] - } - ] - ] - } - ] - ] - ] - }, - { - "tag": "Thunk", - "fields": [ - 17 - ] - } - ] - } - }, - { - "key": 17, - "value": { - "tag": "ACompNode", - "fields": [ - [ - 0, - [ - { - "tag": "Datatype", - "fields": [ - { - "tyName": "Pair" - }, - [ - { - "tag": "BuiltinFlat", - "fields": [ - { - "tag": "IntegerT" - } - ] - }, - { - "tag": "Datatype", - "fields": [ - { - "tyName": "Foo" - }, - [] - ] - } - ] - ] - }, - { - "tag": "Datatype", - "fields": [ - { - "tyName": "Maybe" - }, - [ - { - "tag": "BuiltinFlat", - "fields": [ - { - "tag": "BoolT" - } - ] - } - ] - ] - } - ] - ], - { - "tag": "LamInternal", - "fields": [ - { - "tag": "AnId", - "fields": [ - 16 - ] - } - ] - } - ] - } - }, - { - "key": 16, - "value": { - "tag": "AValNode", - "fields": [ - { - "tag": "Datatype", - "fields": [ - { - "tyName": "Maybe" - }, - [ - { - "tag": "BuiltinFlat", - "fields": [ - { - "tag": "BoolT" - } - ] - } - ] - ] - }, - { - "tag": "Match", - "fields": [ - { - "tag": "AnArg", - "fields": [ - { - "argDeBruijn": 0, - "argIndex": 0, - "argType": { - "tag": "Datatype", - "fields": [ - { - "tyName": "Pair" - }, - [ - { - "tag": "BuiltinFlat", - "fields": [ - { - "tag": "IntegerT" - } - ] - }, - { - "tag": "Datatype", - "fields": [ - { - "tyName": "Foo" - }, - [] - ] - } - ] - ] - } - } - ] - }, - [ - { - "tag": "AnId", - "fields": [ - 15 - ] - } - ] - ] - } - ] - } - }, - { - "key": 15, - "value": { - "tag": "AValNode", - "fields": [ - { - "tag": "ThunkT", - "fields": [ - [ - 0, - [ - { - "tag": "BuiltinFlat", - "fields": [ - { - "tag": "IntegerT" - } - ] - }, - { - "tag": "Datatype", - "fields": [ - { - "tyName": "Foo" - }, - [] - ] - }, - { - "tag": "Datatype", - "fields": [ - { - "tyName": "Maybe" - }, - [ - { - "tag": "BuiltinFlat", - "fields": [ - { - "tag": "BoolT" - } - ] - } - ] - ] - } - ] - ] - ] - }, - { - "tag": "Thunk", - "fields": [ - 14 - ] - } - ] - } - }, - { - "key": 14, - "value": { - "tag": "ACompNode", - "fields": [ - [ - 0, - [ - { - "tag": "BuiltinFlat", - "fields": [ - { - "tag": "IntegerT" - } - ] - }, - { - "tag": "Datatype", - "fields": [ - { - "tyName": "Foo" - }, - [] - ] - }, - { - "tag": "Datatype", - "fields": [ - { - "tyName": "Maybe" - }, - [ - { - "tag": "BuiltinFlat", - "fields": [ - { - "tag": "BoolT" - } - ] - } - ] - ] - } - ] - ], - { - "tag": "LamInternal", - "fields": [ - { - "tag": "AnId", - "fields": [ - 13 - ] - } - ] - } - ] - } - }, - { - "key": 13, - "value": { - "tag": "AValNode", - "fields": [ - { - "tag": "Datatype", - "fields": [ - { - "tyName": "Maybe" - }, - [ - { - "tag": "BuiltinFlat", - "fields": [ - { - "tag": "BoolT" - } - ] - } - ] - ] - }, - { - "tag": "App", - "fields": [ - 12, - [], - [] - ] - } - ] - } - }, - { - "key": 12, - "value": { - "tag": "ACompNode", - "fields": [ - [ - 0, - [ - { - "tag": "Datatype", - "fields": [ - { - "tyName": "Maybe" - }, - [ - { - "tag": "BuiltinFlat", - "fields": [ - { - "tag": "BoolT" - } - ] - } - ] - ] - } - ] - ], - { - "tag": "ForceInternal", - "fields": [ - { - "tag": "AnId", - "fields": [ - 11 - ] - } - ] - } - ] - } - }, - { - "key": 11, - "value": { - "tag": "AValNode", - "fields": [ - { - "tag": "ThunkT", - "fields": [ - [ - 0, - [ - { - "tag": "Datatype", - "fields": [ - { - "tyName": "Maybe" - }, - [ - { - "tag": "BuiltinFlat", - "fields": [ - { - "tag": "BoolT" - } - ] - } - ] - ] - } - ] - ] - ] - }, - { - "tag": "DataConstructor", - "fields": [ - { - "tyName": "Maybe" - }, - "Just", - [ - { - "tag": "AnId", - "fields": [ - 10 - ] - } - ] - ] - } - ] - } - }, - { - "key": 10, - "value": { - "tag": "AValNode", - "fields": [ - { - "tag": "BuiltinFlat", - "fields": [ - { - "tag": "BoolT" - } - ] - }, - { - "tag": "App", - "fields": [ - 9, - [ - { - "tag": "AnId", - "fields": [ - 8 - ] - }, - { - "tag": "AnId", - "fields": [ - 8 - ] - } - ], - [] - ] - } - ] - } - }, - { - "key": 9, - "value": { - "tag": "ACompNode", - "fields": [ - [ - 0, - [ - { - "tag": "BuiltinFlat", - "fields": [ - { - "tag": "IntegerT" - } - ] - }, - { - "tag": "BuiltinFlat", - "fields": [ - { - "tag": "IntegerT" - } - ] - }, - { - "tag": "BuiltinFlat", - "fields": [ - { - "tag": "BoolT" - } - ] - } - ] - ], - { - "tag": "Builtin2Internal", - "fields": [ - { - "tag": "EqualsInteger" - } - ] - } - ] - } - }, - { - "key": 8, - "value": { - "tag": "AValNode", - "fields": [ - { - "tag": "BuiltinFlat", - "fields": [ - { - "tag": "IntegerT" - } - ] - }, - { - "tag": "App", - "fields": [ - 7, - [ - { - "tag": "AnId", - "fields": [ - 6 - ] - }, - { - "tag": "AnId", - "fields": [ - 6 - ] - } - ], - [] - ] - } - ] - } - }, - { - "key": 7, - "value": { - "tag": "ACompNode", - "fields": [ - [ - 0, - [ - { - "tag": "BuiltinFlat", - "fields": [ - { - "tag": "IntegerT" - } - ] - }, - { - "tag": "BuiltinFlat", - "fields": [ - { - "tag": "IntegerT" - } - ] - }, - { - "tag": "BuiltinFlat", - "fields": [ - { - "tag": "IntegerT" - } - ] - } - ] - ], - { - "tag": "Builtin2Internal", - "fields": [ - { - "tag": "SubtractInteger" - } - ] - } - ] - } - }, - { - "key": 6, - "value": { - "tag": "AValNode", - "fields": [ - { - "tag": "BuiltinFlat", - "fields": [ - { - "tag": "IntegerT" - } - ] - }, - { - "tag": "App", - "fields": [ - 2, - [ - { - "tag": "AnArg", - "fields": [ - { - "argDeBruijn": 0, - "argIndex": 0, - "argType": { - "tag": "BuiltinFlat", - "fields": [ - { - "tag": "IntegerT" - } - ] - } - } - ] - }, - { - "tag": "AnArg", - "fields": [ - { - "argDeBruijn": 0, - "argIndex": 1, - "argType": { - "tag": "Datatype", - "fields": [ - { - "tyName": "Foo" - }, - [] - ] - } - } - ] - } - ], - [ - { - "tag": "Nowhere" - } - ] - ] - } - ] - } - }, - { - "key": 5, - "value": { - "tag": "AValNode", - "fields": [ - { - "tag": "ThunkT", - "fields": [ - [ - 0, - [ - { - "tag": "Datatype", - "fields": [ - { - "tyName": "Maybe" - }, - [ - { - "tag": "BuiltinFlat", - "fields": [ - { - "tag": "BoolT" - } - ] - } - ] - ] - } - ] - ] - ] - }, - { - "tag": "Thunk", - "fields": [ - 4 - ] - } - ] - } - }, - { - "key": 4, - "value": { - "tag": "ACompNode", - "fields": [ - [ - 0, - [ - { - "tag": "Datatype", - "fields": [ - { - "tyName": "Maybe" - }, - [ - { - "tag": "BuiltinFlat", - "fields": [ - { - "tag": "BoolT" - } - ] - } - ] - ] - } - ] - ], - { - "tag": "LamInternal", - "fields": [ - { - "tag": "AnId", - "fields": [ - 3 - ] - } - ] - } - ] - } - }, - { - "key": 3, - "value": { - "tag": "AnError" - } - }, - { - "key": 2, - "value": { - "tag": "ACompNode", - "fields": [ - [ - 1, - [ - { - "tag": "BuiltinFlat", - "fields": [ - { - "tag": "IntegerT" - } - ] - }, - { - "tag": "Abstraction", - "fields": [ - [ - 0, - 0 - ] - ] - }, - { - "tag": "BuiltinFlat", - "fields": [ - { - "tag": "IntegerT" - } - ] - } - ] - ], - { - "tag": "LamInternal", - "fields": [ - { - "tag": "AnId", - "fields": [ - 1 - ] - } - ] - } - ] - } - }, - { - "key": 1, - "value": { - "tag": "AValNode", - "fields": [ - { - "tag": "BuiltinFlat", - "fields": [ - { - "tag": "IntegerT" - } - ] - }, - { - "tag": "App", - "fields": [ - 0, - [ - { - "tag": "AnArg", - "fields": [ - { - "argDeBruijn": 0, - "argIndex": 0, - "argType": { - "tag": "BuiltinFlat", - "fields": [ - { - "tag": "IntegerT" - } - ] - } - } - ] - }, - { - "tag": "AnArg", - "fields": [ - { - "argDeBruijn": 0, - "argIndex": 0, - "argType": { - "tag": "BuiltinFlat", - "fields": [ - { - "tag": "IntegerT" - } - ] - } - } - ] - } - ], - [] - ] - } - ] - } - }, - { - "key": 0, - "value": { - "tag": "ACompNode", - "fields": [ - [ - 0, - [ - { - "tag": "BuiltinFlat", - "fields": [ - { - "tag": "IntegerT" - } - ] - }, - { - "tag": "BuiltinFlat", - "fields": [ - { - "tag": "IntegerT" - } - ] - }, - { - "tag": "BuiltinFlat", - "fields": [ - { - "tag": "IntegerT" - } - ] - } - ] - ], - { - "tag": "Builtin2Internal", - "fields": [ - { - "tag": "AddInteger" - } - ] - } - ] - } - } - ], - "version": { - "major": 0, - "minor": 0 - } -} +{"datatypes":[{"tag":"DataDeclaration","fields":{"datatypeName":{"tyName":"Void"},"datatypeBinders":0,"datatypeConstructors":[],"datatypeEncoding":{"tag":"SOP","fields":[]}}},{"tag":"OpaqueData","fields":{"datatypeName":{"tyName":"Foo"},"opaquePlutusConstructors":[{"tag":"PlutusI"},{"tag":"PlutusB"}]}},{"tag":"DataDeclaration","fields":{"datatypeName":{"tyName":"Maybe"},"datatypeBinders":1,"datatypeConstructors":[{"constructorName":"Nothing","constructorArgs":[]},{"constructorName":"Just","constructorArgs":[{"tag":"Abstraction","fields":[[0,0]]}]}],"datatypeEncoding":{"tag":"SOP","fields":[]}}},{"tag":"DataDeclaration","fields":{"datatypeName":{"tyName":"Pair"},"datatypeBinders":2,"datatypeConstructors":[{"constructorName":"Pair","constructorArgs":[{"tag":"Abstraction","fields":[[0,0]]},{"tag":"Abstraction","fields":[[0,1]]}]}],"datatypeEncoding":{"tag":"BuiltinStrategy","fields":[{"tag":"InternalPairStrat"}]}}}],"asg":[{"key":20,"value":{"tag":"ACompNode","fields":[[0,[{"tag":"Datatype","fields":[{"tyName":"Maybe"},[{"tag":"Datatype","fields":[{"tyName":"Pair"},[{"tag":"BuiltinFlat","fields":[{"tag":"IntegerT"}]},{"tag":"Datatype","fields":[{"tyName":"Foo"},[]]}]]}]]},{"tag":"Datatype","fields":[{"tyName":"Maybe"},[{"tag":"BuiltinFlat","fields":[{"tag":"BoolT"}]}]]}]],{"tag":"LamInternal","fields":[{"tag":"AnId","fields":[19]}]}]}},{"key":19,"value":{"tag":"AValNode","fields":[{"tag":"Datatype","fields":[{"tyName":"Maybe"},[{"tag":"BuiltinFlat","fields":[{"tag":"BoolT"}]}]]},{"tag":"Match","fields":[{"tag":"AnArg","fields":[{"argDeBruijn":0,"argIndex":0,"argType":{"tag":"Datatype","fields":[{"tyName":"Maybe"},[{"tag":"Datatype","fields":[{"tyName":"Pair"},[{"tag":"BuiltinFlat","fields":[{"tag":"IntegerT"}]},{"tag":"Datatype","fields":[{"tyName":"Foo"},[]]}]]}]]}}]},[{"tag":"AnId","fields":[5]},{"tag":"AnId","fields":[18]}]]}]}},{"key":18,"value":{"tag":"AValNode","fields":[{"tag":"ThunkT","fields":[[0,[{"tag":"Datatype","fields":[{"tyName":"Pair"},[{"tag":"BuiltinFlat","fields":[{"tag":"IntegerT"}]},{"tag":"Datatype","fields":[{"tyName":"Foo"},[]]}]]},{"tag":"Datatype","fields":[{"tyName":"Maybe"},[{"tag":"BuiltinFlat","fields":[{"tag":"BoolT"}]}]]}]]]},{"tag":"Thunk","fields":[17]}]}},{"key":17,"value":{"tag":"ACompNode","fields":[[0,[{"tag":"Datatype","fields":[{"tyName":"Pair"},[{"tag":"BuiltinFlat","fields":[{"tag":"IntegerT"}]},{"tag":"Datatype","fields":[{"tyName":"Foo"},[]]}]]},{"tag":"Datatype","fields":[{"tyName":"Maybe"},[{"tag":"BuiltinFlat","fields":[{"tag":"BoolT"}]}]]}]],{"tag":"LamInternal","fields":[{"tag":"AnId","fields":[16]}]}]}},{"key":16,"value":{"tag":"AValNode","fields":[{"tag":"Datatype","fields":[{"tyName":"Maybe"},[{"tag":"BuiltinFlat","fields":[{"tag":"BoolT"}]}]]},{"tag":"Match","fields":[{"tag":"AnArg","fields":[{"argDeBruijn":0,"argIndex":0,"argType":{"tag":"Datatype","fields":[{"tyName":"Pair"},[{"tag":"BuiltinFlat","fields":[{"tag":"IntegerT"}]},{"tag":"Datatype","fields":[{"tyName":"Foo"},[]]}]]}}]},[{"tag":"AnId","fields":[15]}]]}]}},{"key":15,"value":{"tag":"AValNode","fields":[{"tag":"ThunkT","fields":[[0,[{"tag":"BuiltinFlat","fields":[{"tag":"IntegerT"}]},{"tag":"Datatype","fields":[{"tyName":"Foo"},[]]},{"tag":"Datatype","fields":[{"tyName":"Maybe"},[{"tag":"BuiltinFlat","fields":[{"tag":"BoolT"}]}]]}]]]},{"tag":"Thunk","fields":[14]}]}},{"key":14,"value":{"tag":"ACompNode","fields":[[0,[{"tag":"BuiltinFlat","fields":[{"tag":"IntegerT"}]},{"tag":"Datatype","fields":[{"tyName":"Foo"},[]]},{"tag":"Datatype","fields":[{"tyName":"Maybe"},[{"tag":"BuiltinFlat","fields":[{"tag":"BoolT"}]}]]}]],{"tag":"LamInternal","fields":[{"tag":"AnId","fields":[13]}]}]}},{"key":13,"value":{"tag":"AValNode","fields":[{"tag":"Datatype","fields":[{"tyName":"Maybe"},[{"tag":"BuiltinFlat","fields":[{"tag":"BoolT"}]}]]},{"tag":"App","fields":[12,[],[],[0,[{"tag":"Datatype","fields":[{"tyName":"Maybe"},[{"tag":"BuiltinFlat","fields":[{"tag":"BoolT"}]}]]}]]]}]}},{"key":12,"value":{"tag":"ACompNode","fields":[[0,[{"tag":"Datatype","fields":[{"tyName":"Maybe"},[{"tag":"BuiltinFlat","fields":[{"tag":"BoolT"}]}]]}]],{"tag":"ForceInternal","fields":[{"tag":"AnId","fields":[11]}]}]}},{"key":11,"value":{"tag":"AValNode","fields":[{"tag":"ThunkT","fields":[[0,[{"tag":"Datatype","fields":[{"tyName":"Maybe"},[{"tag":"BuiltinFlat","fields":[{"tag":"BoolT"}]}]]}]]]},{"tag":"DataConstructor","fields":[{"tyName":"Maybe"},"Just",[{"tag":"AnId","fields":[10]}]]}]}},{"key":10,"value":{"tag":"AValNode","fields":[{"tag":"BuiltinFlat","fields":[{"tag":"BoolT"}]},{"tag":"App","fields":[9,[{"tag":"AnId","fields":[8]},{"tag":"AnId","fields":[8]}],[],[0,[{"tag":"BuiltinFlat","fields":[{"tag":"IntegerT"}]},{"tag":"BuiltinFlat","fields":[{"tag":"IntegerT"}]},{"tag":"BuiltinFlat","fields":[{"tag":"BoolT"}]}]]]}]}},{"key":9,"value":{"tag":"ACompNode","fields":[[0,[{"tag":"BuiltinFlat","fields":[{"tag":"IntegerT"}]},{"tag":"BuiltinFlat","fields":[{"tag":"IntegerT"}]},{"tag":"BuiltinFlat","fields":[{"tag":"BoolT"}]}]],{"tag":"Builtin2Internal","fields":[{"tag":"EqualsInteger"}]}]}},{"key":8,"value":{"tag":"AValNode","fields":[{"tag":"BuiltinFlat","fields":[{"tag":"IntegerT"}]},{"tag":"App","fields":[7,[{"tag":"AnId","fields":[6]},{"tag":"AnId","fields":[6]}],[],[0,[{"tag":"BuiltinFlat","fields":[{"tag":"IntegerT"}]},{"tag":"BuiltinFlat","fields":[{"tag":"IntegerT"}]},{"tag":"BuiltinFlat","fields":[{"tag":"IntegerT"}]}]]]}]}},{"key":7,"value":{"tag":"ACompNode","fields":[[0,[{"tag":"BuiltinFlat","fields":[{"tag":"IntegerT"}]},{"tag":"BuiltinFlat","fields":[{"tag":"IntegerT"}]},{"tag":"BuiltinFlat","fields":[{"tag":"IntegerT"}]}]],{"tag":"Builtin2Internal","fields":[{"tag":"SubtractInteger"}]}]}},{"key":6,"value":{"tag":"AValNode","fields":[{"tag":"BuiltinFlat","fields":[{"tag":"IntegerT"}]},{"tag":"App","fields":[2,[{"tag":"AnArg","fields":[{"argDeBruijn":0,"argIndex":0,"argType":{"tag":"BuiltinFlat","fields":[{"tag":"IntegerT"}]}}]},{"tag":"AnArg","fields":[{"argDeBruijn":0,"argIndex":1,"argType":{"tag":"Datatype","fields":[{"tyName":"Foo"},[]]}}]}],[{"tag":"Nowhere"}],[0,[{"tag":"BuiltinFlat","fields":[{"tag":"IntegerT"}]},{"tag":"Datatype","fields":[{"tyName":"Foo"},[]]},{"tag":"BuiltinFlat","fields":[{"tag":"IntegerT"}]}]]]}]}},{"key":5,"value":{"tag":"AValNode","fields":[{"tag":"ThunkT","fields":[[0,[{"tag":"Datatype","fields":[{"tyName":"Maybe"},[{"tag":"BuiltinFlat","fields":[{"tag":"BoolT"}]}]]}]]]},{"tag":"Thunk","fields":[4]}]}},{"key":4,"value":{"tag":"ACompNode","fields":[[0,[{"tag":"Datatype","fields":[{"tyName":"Maybe"},[{"tag":"BuiltinFlat","fields":[{"tag":"BoolT"}]}]]}]],{"tag":"LamInternal","fields":[{"tag":"AnId","fields":[3]}]}]}},{"key":3,"value":{"tag":"AnError"}},{"key":2,"value":{"tag":"ACompNode","fields":[[1,[{"tag":"BuiltinFlat","fields":[{"tag":"IntegerT"}]},{"tag":"Abstraction","fields":[[0,0]]},{"tag":"BuiltinFlat","fields":[{"tag":"IntegerT"}]}]],{"tag":"LamInternal","fields":[{"tag":"AnId","fields":[1]}]}]}},{"key":1,"value":{"tag":"AValNode","fields":[{"tag":"BuiltinFlat","fields":[{"tag":"IntegerT"}]},{"tag":"App","fields":[0,[{"tag":"AnArg","fields":[{"argDeBruijn":0,"argIndex":0,"argType":{"tag":"BuiltinFlat","fields":[{"tag":"IntegerT"}]}}]},{"tag":"AnArg","fields":[{"argDeBruijn":0,"argIndex":0,"argType":{"tag":"BuiltinFlat","fields":[{"tag":"IntegerT"}]}}]}],[],[0,[{"tag":"BuiltinFlat","fields":[{"tag":"IntegerT"}]},{"tag":"BuiltinFlat","fields":[{"tag":"IntegerT"}]},{"tag":"BuiltinFlat","fields":[{"tag":"IntegerT"}]}]]]}]}},{"key":0,"value":{"tag":"ACompNode","fields":[[0,[{"tag":"BuiltinFlat","fields":[{"tag":"IntegerT"}]},{"tag":"BuiltinFlat","fields":[{"tag":"IntegerT"}]},{"tag":"BuiltinFlat","fields":[{"tag":"IntegerT"}]}]],{"tag":"Builtin2Internal","fields":[{"tag":"AddInteger"}]}]}}],"version":{"major":0,"minor":1}} \ No newline at end of file