-- | This module exports everything from the stdlib via a data type which allows to test
-- various procedures (pretty-printing, type checking, etc) over the entire stdlib in a
-- convenient way: each time a function / data type is added to the stdlib, none of the
-- tests is required to be adapted, instead you just add the new definition to 'stdLib'
-- defined below and all the tests see it automatically.

{-# LANGUAGE ScopedTypeVariables #-}

module PlutusCore.StdLib.Everything
    ( stdLib
    ) where

import PlutusCore.Default
import PlutusCore.FsTree

import PlutusCore.StdLib.Data.Bool
import PlutusCore.StdLib.Data.ChurchNat
import PlutusCore.StdLib.Data.Data
import PlutusCore.StdLib.Data.Function as Function
import PlutusCore.StdLib.Data.Integer
import PlutusCore.StdLib.Data.List as Builtin
import PlutusCore.StdLib.Data.Nat as Nat
import PlutusCore.StdLib.Data.Pair as Builtin
import PlutusCore.StdLib.Data.ScottList as Scott
import PlutusCore.StdLib.Data.Sum as Sum
import PlutusCore.StdLib.Data.Unit
import PlutusCore.StdLib.Meta.Data.Tuple
import PlutusCore.StdLib.Type

-- | The entire stdlib exported as a single value.
stdLib :: PlcFolderContents DefaultUni DefaultFun
stdLib :: PlcFolderContents DefaultUni DefaultFun
stdLib =
    [FsTree (PlcEntity DefaultUni DefaultFun)]
-> PlcFolderContents DefaultUni DefaultFun
forall a. [FsTree a] -> FolderContents a
FolderContents
      [ String
-> [FsTree (PlcEntity DefaultUni DefaultFun)]
-> FsTree (PlcEntity DefaultUni DefaultFun)
forall a. String -> [FsTree a] -> FsTree a
treeFolderContents String
"StdLib"
          [ String
-> [FsTree (PlcEntity DefaultUni DefaultFun)]
-> FsTree (PlcEntity DefaultUni DefaultFun)
forall a. String -> [FsTree a] -> FsTree a
treeFolderContents String
"Data"
              [ String
-> [FsTree (PlcEntity DefaultUni DefaultFun)]
-> FsTree (PlcEntity DefaultUni DefaultFun)
forall a. String -> [FsTree a] -> FsTree a
treeFolderContents String
"Bool"
                  [ String
-> Type TyName DefaultUni ()
-> FsTree (PlcEntity DefaultUni DefaultFun)
forall (uni :: * -> *) fun.
String -> Type TyName uni () -> PlcFsTree uni fun
plcTypeFile String
"Bool"       Type TyName DefaultUni ()
forall (uni :: * -> *). Includes uni Bool => Type TyName uni ()
bool
                  , String
-> Term TyName Name DefaultUni DefaultFun ()
-> FsTree (PlcEntity DefaultUni DefaultFun)
forall (uni :: * -> *) fun.
String -> Term TyName Name uni fun () -> PlcFsTree uni fun
plcTermFile String
"True"       Term TyName Name DefaultUni DefaultFun ()
forall (term :: * -> *) (uni :: * -> *) fun.
(TermLike term TyName Name uni fun, Includes uni Bool) =>
term ()
true
                  , String
-> Term TyName Name DefaultUni DefaultFun ()
-> FsTree (PlcEntity DefaultUni DefaultFun)
forall (uni :: * -> *) fun.
String -> Term TyName Name uni fun () -> PlcFsTree uni fun
plcTermFile String
"False"      Term TyName Name DefaultUni DefaultFun ()
forall (term :: * -> *) (uni :: * -> *) fun.
(TermLike term TyName Name uni fun, Includes uni Bool) =>
term ()
false
                  , String
-> Term TyName Name DefaultUni DefaultFun ()
-> FsTree (PlcEntity DefaultUni DefaultFun)
forall (uni :: * -> *) fun.
String -> Term TyName Name uni fun () -> PlcFsTree uni fun
plcTermFile String
"IfThenElse" Term TyName Name DefaultUni DefaultFun ()
forall (term :: * -> *) (uni :: * -> *).
(TermLike term TyName Name uni DefaultFun, Includes uni Bool,
 Includes uni ()) =>
term ()
ifThenElse
                  ]
              , String
-> [FsTree (PlcEntity DefaultUni DefaultFun)]
-> FsTree (PlcEntity DefaultUni DefaultFun)
forall a. String -> [FsTree a] -> FsTree a
treeFolderContents String
"ChurchNat"
                  [ String
-> Type TyName DefaultUni ()
-> FsTree (PlcEntity DefaultUni DefaultFun)
forall (uni :: * -> *) fun.
String -> Type TyName uni () -> PlcFsTree uni fun
plcTypeFile String
"ChurchNat"  Type TyName DefaultUni ()
forall (uni :: * -> *). Type TyName uni ()
churchNat
                  , String
-> Term TyName Name DefaultUni DefaultFun ()
-> FsTree (PlcEntity DefaultUni DefaultFun)
forall (uni :: * -> *) fun.
String -> Term TyName Name uni fun () -> PlcFsTree uni fun
plcTermFile String
"ChurchZero" Term TyName Name DefaultUni DefaultFun ()
forall (term :: * -> *) (uni :: * -> *) fun.
TermLike term TyName Name uni fun =>
term ()
churchZero
                  , String
-> Term TyName Name DefaultUni DefaultFun ()
-> FsTree (PlcEntity DefaultUni DefaultFun)
forall (uni :: * -> *) fun.
String -> Term TyName Name uni fun () -> PlcFsTree uni fun
plcTermFile String
"ChurchSucc" Term TyName Name DefaultUni DefaultFun ()
forall (term :: * -> *) (uni :: * -> *) fun.
TermLike term TyName Name uni fun =>
term ()
churchSucc
                  ]
              , String
-> [FsTree (PlcEntity DefaultUni DefaultFun)]
-> FsTree (PlcEntity DefaultUni DefaultFun)
forall a. String -> [FsTree a] -> FsTree a
treeFolderContents String
"Function"
                  [ String
-> Term TyName Name DefaultUni DefaultFun ()
-> FsTree (PlcEntity DefaultUni DefaultFun)
forall (uni :: * -> *) fun.
String -> Term TyName Name uni fun () -> PlcFsTree uni fun
plcTermFile String
"Const"  Term TyName Name DefaultUni DefaultFun ()
forall (term :: * -> *) (uni :: * -> *) fun.
TermLike term TyName Name uni fun =>
term ()
Function.const
                  , String
-> Term TyName Name DefaultUni DefaultFun ()
-> FsTree (PlcEntity DefaultUni DefaultFun)
forall (uni :: * -> *) fun.
String -> Term TyName Name uni fun () -> PlcFsTree uni fun
plcTermFile String
"Apply"  Term TyName Name DefaultUni DefaultFun ()
forall (term :: * -> *) (uni :: * -> *) fun.
TermLike term TyName Name uni fun =>
term ()
applyFun
                  , String
-> Type TyName DefaultUni ()
-> FsTree (PlcEntity DefaultUni DefaultFun)
forall (uni :: * -> *) fun.
String -> Type TyName uni () -> PlcFsTree uni fun
plcTypeFile String
"Self"   (Type TyName DefaultUni ()
 -> FsTree (PlcEntity DefaultUni DefaultFun))
-> Type TyName DefaultUni ()
-> FsTree (PlcEntity DefaultUni DefaultFun)
forall a b. (a -> b) -> a -> b
$ RecursiveType DefaultUni Any () -> Type TyName DefaultUni ()
forall (uni :: * -> *) fun ann.
RecursiveType uni fun ann -> Type TyName uni ann
_recursiveType RecursiveType DefaultUni Any ()
forall (uni :: * -> *) fun. RecursiveType uni fun ()
selfData
                  , String
-> Term TyName Name DefaultUni DefaultFun ()
-> FsTree (PlcEntity DefaultUni DefaultFun)
forall (uni :: * -> *) fun.
String -> Term TyName Name uni fun () -> PlcFsTree uni fun
plcTermFile String
"Unroll" Term TyName Name DefaultUni DefaultFun ()
forall (term :: * -> *) (uni :: * -> *) fun.
TermLike term TyName Name uni fun =>
term ()
unroll
                  , String
-> Term TyName Name DefaultUni DefaultFun ()
-> FsTree (PlcEntity DefaultUni DefaultFun)
forall (uni :: * -> *) fun.
String -> Term TyName Name uni fun () -> PlcFsTree uni fun
plcTermFile String
"Fix"    Term TyName Name DefaultUni DefaultFun ()
forall (term :: * -> *) (uni :: * -> *) fun.
TermLike term TyName Name uni fun =>
term ()
fix
                  , String
-> Term TyName Name DefaultUni DefaultFun ()
-> FsTree (PlcEntity DefaultUni DefaultFun)
forall (uni :: * -> *) fun.
String -> Term TyName Name uni fun () -> PlcFsTree uni fun
plcTermFile String
"Fix2"   (Term TyName Name DefaultUni DefaultFun ()
 -> FsTree (PlcEntity DefaultUni DefaultFun))
-> Term TyName Name DefaultUni DefaultFun ()
-> FsTree (PlcEntity DefaultUni DefaultFun)
forall a b. (a -> b) -> a -> b
$ Integer
-> Term TyName Name DefaultUni DefaultFun ()
-> Term TyName Name DefaultUni DefaultFun ()
forall (term :: * -> *) (uni :: * -> *) fun.
TermLike term TyName Name uni fun =>
Integer -> term () -> term ()
fixN Integer
2 Term TyName Name DefaultUni DefaultFun ()
forall (term :: * -> *) (uni :: * -> *) fun.
TermLike term TyName Name uni fun =>
term ()
fixBy
                  ]
              , String
-> [FsTree (PlcEntity DefaultUni DefaultFun)]
-> FsTree (PlcEntity DefaultUni DefaultFun)
forall a. String -> [FsTree a] -> FsTree a
treeFolderContents String
"Integer"
                  [ String
-> Type TyName DefaultUni ()
-> FsTree (PlcEntity DefaultUni DefaultFun)
forall (uni :: * -> *) fun.
String -> Type TyName uni () -> PlcFsTree uni fun
plcTypeFile String
"integer"     Type TyName DefaultUni ()
forall (uni :: * -> *) tyname.
Includes uni Integer =>
Type tyname uni ()
integer
                  , String
-> Term TyName Name DefaultUni DefaultFun ()
-> FsTree (PlcEntity DefaultUni DefaultFun)
forall (uni :: * -> *) fun.
String -> Term TyName Name uni fun () -> PlcFsTree uni fun
plcTermFile String
"SuccInteger" Term TyName Name DefaultUni DefaultFun ()
forall (term :: * -> *) (uni :: * -> *).
(TermLike term TyName Name uni DefaultFun, Includes uni Integer) =>
term ()
succInteger
                  ]
              , String
-> [FsTree (PlcEntity DefaultUni DefaultFun)]
-> FsTree (PlcEntity DefaultUni DefaultFun)
forall a. String -> [FsTree a] -> FsTree a
treeFolderContents String
"Pair"
                  [ String
-> Type TyName DefaultUni ()
-> FsTree (PlcEntity DefaultUni DefaultFun)
forall (uni :: * -> *) fun.
String -> Type TyName uni () -> PlcFsTree uni fun
plcTypeFile String
"Pair"    Type TyName DefaultUni ()
forall (uni :: * -> *). Contains uni (,) => Type TyName uni ()
pair
                  , String
-> Term TyName Name DefaultUni DefaultFun ()
-> FsTree (PlcEntity DefaultUni DefaultFun)
forall (uni :: * -> *) fun.
String -> Term TyName Name uni fun () -> PlcFsTree uni fun
plcTermFile String
"Fst"     Term TyName Name DefaultUni DefaultFun ()
forall (term :: * -> *).
TermLike term TyName Name DefaultUni DefaultFun =>
term ()
Builtin.fstPair
                  , String
-> Term TyName Name DefaultUni DefaultFun ()
-> FsTree (PlcEntity DefaultUni DefaultFun)
forall (uni :: * -> *) fun.
String -> Term TyName Name uni fun () -> PlcFsTree uni fun
plcTermFile String
"Snd"     Term TyName Name DefaultUni DefaultFun ()
forall (term :: * -> *).
TermLike term TyName Name DefaultUni DefaultFun =>
term ()
Builtin.sndPair
                  , String
-> Term TyName Name DefaultUni DefaultFun ()
-> FsTree (PlcEntity DefaultUni DefaultFun)
forall (uni :: * -> *) fun.
String -> Term TyName Name uni fun () -> PlcFsTree uni fun
plcTermFile String
"Uncurry" Term TyName Name DefaultUni DefaultFun ()
forall (term :: * -> *).
TermLike term TyName Name DefaultUni DefaultFun =>
term ()
Builtin.uncurry
                  ]
              , String
-> [FsTree (PlcEntity DefaultUni DefaultFun)]
-> FsTree (PlcEntity DefaultUni DefaultFun)
forall a. String -> [FsTree a] -> FsTree a
treeFolderContents String
"List"
                  [ String
-> Type TyName DefaultUni ()
-> FsTree (PlcEntity DefaultUni DefaultFun)
forall (uni :: * -> *) fun.
String -> Type TyName uni () -> PlcFsTree uni fun
plcTypeFile String
"List"      Type TyName DefaultUni ()
forall (uni :: * -> *). Contains uni [] => Type TyName uni ()
list
                  , String
-> Term TyName Name DefaultUni DefaultFun ()
-> FsTree (PlcEntity DefaultUni DefaultFun)
forall (uni :: * -> *) fun.
String -> Term TyName Name uni fun () -> PlcFsTree uni fun
plcTermFile String
"CaseList"  Term TyName Name DefaultUni DefaultFun ()
forall (term :: * -> *).
TermLike term TyName Name DefaultUni DefaultFun =>
term ()
Builtin.caseList
                  , String
-> Term TyName Name DefaultUni DefaultFun ()
-> FsTree (PlcEntity DefaultUni DefaultFun)
forall (uni :: * -> *) fun.
String -> Term TyName Name uni fun () -> PlcFsTree uni fun
plcTermFile String
"FoldrList" Term TyName Name DefaultUni DefaultFun ()
forall (term :: * -> *).
TermLike term TyName Name DefaultUni DefaultFun =>
term ()
Builtin.foldrList
                  , String
-> Term TyName Name DefaultUni DefaultFun ()
-> FsTree (PlcEntity DefaultUni DefaultFun)
forall (uni :: * -> *) fun.
String -> Term TyName Name uni fun () -> PlcFsTree uni fun
plcTermFile String
"FoldList"  Term TyName Name DefaultUni DefaultFun ()
forall (term :: * -> *).
TermLike term TyName Name DefaultUni DefaultFun =>
term ()
Builtin.foldList
                  ]
              , String
-> [FsTree (PlcEntity DefaultUni DefaultFun)]
-> FsTree (PlcEntity DefaultUni DefaultFun)
forall a. String -> [FsTree a] -> FsTree a
treeFolderContents String
"Data"
                  [ String
-> Type TyName DefaultUni ()
-> FsTree (PlcEntity DefaultUni DefaultFun)
forall (uni :: * -> *) fun.
String -> Type TyName uni () -> PlcFsTree uni fun
plcTypeFile String
"Data"     Type TyName DefaultUni ()
forall (uni :: * -> *). Contains uni Data => Type TyName uni ()
dataTy
                  , String
-> Term TyName Name DefaultUni DefaultFun ()
-> FsTree (PlcEntity DefaultUni DefaultFun)
forall (uni :: * -> *) fun.
String -> Term TyName Name uni fun () -> PlcFsTree uni fun
plcTermFile String
"caseData" Term TyName Name DefaultUni DefaultFun ()
forall (term :: * -> *).
TermLike term TyName Name DefaultUni DefaultFun =>
term ()
caseData
                  ]
              , String
-> [FsTree (PlcEntity DefaultUni DefaultFun)]
-> FsTree (PlcEntity DefaultUni DefaultFun)
forall a. String -> [FsTree a] -> FsTree a
treeFolderContents String
"ScottList"
                  [ String
-> Type TyName DefaultUni ()
-> FsTree (PlcEntity DefaultUni DefaultFun)
forall (uni :: * -> *) fun.
String -> Type TyName uni () -> PlcFsTree uni fun
plcTypeFile String
"List"       Type TyName DefaultUni ()
forall (uni :: * -> *). Type TyName uni ()
listTy
                  , String
-> Term TyName Name DefaultUni DefaultFun ()
-> FsTree (PlcEntity DefaultUni DefaultFun)
forall (uni :: * -> *) fun.
String -> Term TyName Name uni fun () -> PlcFsTree uni fun
plcTermFile String
"Nil"        Term TyName Name DefaultUni DefaultFun ()
forall (term :: * -> *) (uni :: * -> *) fun.
TermLike term TyName Name uni fun =>
term ()
nil
                  , String
-> Term TyName Name DefaultUni DefaultFun ()
-> FsTree (PlcEntity DefaultUni DefaultFun)
forall (uni :: * -> *) fun.
String -> Term TyName Name uni fun () -> PlcFsTree uni fun
plcTermFile String
"Cons"       Term TyName Name DefaultUni DefaultFun ()
forall (term :: * -> *) (uni :: * -> *) fun.
TermLike term TyName Name uni fun =>
term ()
cons
                  , String
-> Term TyName Name DefaultUni DefaultFun ()
-> FsTree (PlcEntity DefaultUni DefaultFun)
forall (uni :: * -> *) fun.
String -> Term TyName Name uni fun () -> PlcFsTree uni fun
plcTermFile String
"FoldrList"  Term TyName Name DefaultUni DefaultFun ()
forall (term :: * -> *) (uni :: * -> *) fun.
TermLike term TyName Name uni fun =>
term ()
Scott.foldrList
                  , String
-> Term TyName Name DefaultUni DefaultFun ()
-> FsTree (PlcEntity DefaultUni DefaultFun)
forall (uni :: * -> *) fun.
String -> Term TyName Name uni fun () -> PlcFsTree uni fun
plcTermFile String
"FoldList"   Term TyName Name DefaultUni DefaultFun ()
forall (term :: * -> *) (uni :: * -> *) fun.
TermLike term TyName Name uni fun =>
term ()
Scott.foldList
                  , String
-> Term TyName Name DefaultUni DefaultFun ()
-> FsTree (PlcEntity DefaultUni DefaultFun)
forall (uni :: * -> *) fun.
String -> Term TyName Name uni fun () -> PlcFsTree uni fun
plcTermFile String
"Reverse"    Term TyName Name DefaultUni DefaultFun ()
forall (term :: * -> *) (uni :: * -> *) fun.
TermLike term TyName Name uni fun =>
term ()
Scott.reverse
                  , String
-> Term TyName Name DefaultUni DefaultFun ()
-> FsTree (PlcEntity DefaultUni DefaultFun)
forall (uni :: * -> *) fun.
String -> Term TyName Name uni fun () -> PlcFsTree uni fun
plcTermFile String
"EnumFromTo" Term TyName Name DefaultUni DefaultFun ()
forall (term :: * -> *) (uni :: * -> *).
(TermLike term TyName Name uni DefaultFun, Includes uni Integer,
 Includes uni (), Includes uni Bool) =>
term ()
Scott.enumFromTo
                  , String
-> Term TyName Name DefaultUni DefaultFun ()
-> FsTree (PlcEntity DefaultUni DefaultFun)
forall (uni :: * -> *) fun.
String -> Term TyName Name uni fun () -> PlcFsTree uni fun
plcTermFile String
"Sum"        Term TyName Name DefaultUni DefaultFun ()
forall (term :: * -> *) (uni :: * -> *).
(TermLike term TyName Name uni DefaultFun, Includes uni Integer) =>
term ()
Scott.sum
                  , String
-> Term TyName Name DefaultUni DefaultFun ()
-> FsTree (PlcEntity DefaultUni DefaultFun)
forall (uni :: * -> *) fun.
String -> Term TyName Name uni fun () -> PlcFsTree uni fun
plcTermFile String
"Product"    Term TyName Name DefaultUni DefaultFun ()
forall (term :: * -> *) (uni :: * -> *).
(TermLike term TyName Name uni DefaultFun, Includes uni Integer) =>
term ()
Scott.product
                  ]
              , String
-> [FsTree (PlcEntity DefaultUni DefaultFun)]
-> FsTree (PlcEntity DefaultUni DefaultFun)
forall a. String -> [FsTree a] -> FsTree a
treeFolderContents String
"Nat"
                  [ String
-> Type TyName DefaultUni ()
-> FsTree (PlcEntity DefaultUni DefaultFun)
forall (uni :: * -> *) fun.
String -> Type TyName uni () -> PlcFsTree uni fun
plcTypeFile String
"Nat"          Type TyName DefaultUni ()
forall (uni :: * -> *). Type TyName uni ()
natTy
                  , String
-> Term TyName Name DefaultUni DefaultFun ()
-> FsTree (PlcEntity DefaultUni DefaultFun)
forall (uni :: * -> *) fun.
String -> Term TyName Name uni fun () -> PlcFsTree uni fun
plcTermFile String
"Zero"         Term TyName Name DefaultUni DefaultFun ()
forall (term :: * -> *) (uni :: * -> *) fun.
TermLike term TyName Name uni fun =>
term ()
zero
                  , String
-> Term TyName Name DefaultUni DefaultFun ()
-> FsTree (PlcEntity DefaultUni DefaultFun)
forall (uni :: * -> *) fun.
String -> Term TyName Name uni fun () -> PlcFsTree uni fun
plcTermFile String
"Succ"         Term TyName Name DefaultUni DefaultFun ()
forall (term :: * -> *) (uni :: * -> *) fun.
TermLike term TyName Name uni fun =>
term ()
Nat.succ
                  , String
-> Term TyName Name DefaultUni DefaultFun ()
-> FsTree (PlcEntity DefaultUni DefaultFun)
forall (uni :: * -> *) fun.
String -> Term TyName Name uni fun () -> PlcFsTree uni fun
plcTermFile String
"FoldrNat"     Term TyName Name DefaultUni DefaultFun ()
forall (term :: * -> *) (uni :: * -> *) fun.
TermLike term TyName Name uni fun =>
term ()
foldrNat
                  , String
-> Term TyName Name DefaultUni DefaultFun ()
-> FsTree (PlcEntity DefaultUni DefaultFun)
forall (uni :: * -> *) fun.
String -> Term TyName Name uni fun () -> PlcFsTree uni fun
plcTermFile String
"FoldNat"      Term TyName Name DefaultUni DefaultFun ()
forall (term :: * -> *) (uni :: * -> *) fun.
TermLike term TyName Name uni fun =>
term ()
foldNat
                  , String
-> Term TyName Name DefaultUni DefaultFun ()
-> FsTree (PlcEntity DefaultUni DefaultFun)
forall (uni :: * -> *) fun.
String -> Term TyName Name uni fun () -> PlcFsTree uni fun
plcTermFile String
"NatToInteger" Term TyName Name DefaultUni DefaultFun ()
forall (term :: * -> *) (uni :: * -> *).
(TermLike term TyName Name uni DefaultFun, Includes uni Integer) =>
term ()
natToInteger
                  ]
              , String
-> [FsTree (PlcEntity DefaultUni DefaultFun)]
-> FsTree (PlcEntity DefaultUni DefaultFun)
forall a. String -> [FsTree a] -> FsTree a
treeFolderContents String
"Sum"
                  [ String
-> Type TyName DefaultUni ()
-> FsTree (PlcEntity DefaultUni DefaultFun)
forall (uni :: * -> *) fun.
String -> Type TyName uni () -> PlcFsTree uni fun
plcTypeFile String
"Sum"   Type TyName DefaultUni ()
forall (uni :: * -> *). Type TyName uni ()
Sum.sum
                  , String
-> Term TyName Name DefaultUni DefaultFun ()
-> FsTree (PlcEntity DefaultUni DefaultFun)
forall (uni :: * -> *) fun.
String -> Term TyName Name uni fun () -> PlcFsTree uni fun
plcTermFile String
"Left"  Term TyName Name DefaultUni DefaultFun ()
forall (term :: * -> *) (uni :: * -> *) fun.
TermLike term TyName Name uni fun =>
term ()
left
                  , String
-> Term TyName Name DefaultUni DefaultFun ()
-> FsTree (PlcEntity DefaultUni DefaultFun)
forall (uni :: * -> *) fun.
String -> Term TyName Name uni fun () -> PlcFsTree uni fun
plcTermFile String
"Right" Term TyName Name DefaultUni DefaultFun ()
forall (term :: * -> *) (uni :: * -> *) fun.
TermLike term TyName Name uni fun =>
term ()
right
                  ]
              , String
-> [FsTree (PlcEntity DefaultUni DefaultFun)]
-> FsTree (PlcEntity DefaultUni DefaultFun)
forall a. String -> [FsTree a] -> FsTree a
treeFolderContents String
"Unit"
                  [ String
-> Type TyName DefaultUni ()
-> FsTree (PlcEntity DefaultUni DefaultFun)
forall (uni :: * -> *) fun.
String -> Type TyName uni () -> PlcFsTree uni fun
plcTypeFile String
"Unit"    Type TyName DefaultUni ()
forall (uni :: * -> *). Includes uni () => Type TyName uni ()
unit
                  , String
-> Term TyName Name DefaultUni DefaultFun ()
-> FsTree (PlcEntity DefaultUni DefaultFun)
forall (uni :: * -> *) fun.
String -> Term TyName Name uni fun () -> PlcFsTree uni fun
plcTermFile String
"Unitval" Term TyName Name DefaultUni DefaultFun ()
forall (term :: * -> *) (uni :: * -> *) fun.
(TermLike term TyName Name uni fun, Includes uni ()) =>
term ()
unitval
                  ]
              ]
          , String
-> [FsTree (PlcEntity DefaultUni DefaultFun)]
-> FsTree (PlcEntity DefaultUni DefaultFun)
forall a. String -> [FsTree a] -> FsTree a
treeFolderContents String
"Meta"
              [ String
-> [FsTree (PlcEntity DefaultUni DefaultFun)]
-> FsTree (PlcEntity DefaultUni DefaultFun)
forall a. String -> [FsTree a] -> FsTree a
treeFolderContents String
"Data"
                  [ String
-> [FsTree (PlcEntity DefaultUni DefaultFun)]
-> FsTree (PlcEntity DefaultUni DefaultFun)
forall a. String -> [FsTree a] -> FsTree a
treeFolderContents String
"Tuple"
                      [ String
-> Type TyName DefaultUni ()
-> FsTree (PlcEntity DefaultUni DefaultFun)
forall (uni :: * -> *) fun.
String -> Type TyName uni () -> PlcFsTree uni fun
plcTypeFile String
"ProdN2"   (Type TyName DefaultUni ()
 -> FsTree (PlcEntity DefaultUni DefaultFun))
-> Type TyName DefaultUni ()
-> FsTree (PlcEntity DefaultUni DefaultFun)
forall a b. (a -> b) -> a -> b
$ Int -> Type TyName DefaultUni ()
forall (uni :: * -> *). Int -> Type TyName uni ()
prodN Int
2
                      , String
-> Term TyName Name DefaultUni DefaultFun ()
-> FsTree (PlcEntity DefaultUni DefaultFun)
forall (uni :: * -> *) fun.
String -> Term TyName Name uni fun () -> PlcFsTree uni fun
plcTermFile String
"ProdN2_0" (Term TyName Name DefaultUni DefaultFun ()
 -> FsTree (PlcEntity DefaultUni DefaultFun))
-> Term TyName Name DefaultUni DefaultFun ()
-> FsTree (PlcEntity DefaultUni DefaultFun)
forall a b. (a -> b) -> a -> b
$ Int -> Int -> Term TyName Name DefaultUni DefaultFun ()
forall (term :: * -> *) (uni :: * -> *) fun.
TermLike term TyName Name uni fun =>
Int -> Int -> term ()
prodNAccessor Int
2 Int
0
                      , String
-> Term TyName Name DefaultUni DefaultFun ()
-> FsTree (PlcEntity DefaultUni DefaultFun)
forall (uni :: * -> *) fun.
String -> Term TyName Name uni fun () -> PlcFsTree uni fun
plcTermFile String
"ProdN2_1" (Term TyName Name DefaultUni DefaultFun ()
 -> FsTree (PlcEntity DefaultUni DefaultFun))
-> Term TyName Name DefaultUni DefaultFun ()
-> FsTree (PlcEntity DefaultUni DefaultFun)
forall a b. (a -> b) -> a -> b
$ Int -> Int -> Term TyName Name DefaultUni DefaultFun ()
forall (term :: * -> *) (uni :: * -> *) fun.
TermLike term TyName Name uni fun =>
Int -> Int -> term ()
prodNAccessor Int
2 Int
1
                      , String
-> Term TyName Name DefaultUni DefaultFun ()
-> FsTree (PlcEntity DefaultUni DefaultFun)
forall (uni :: * -> *) fun.
String -> Term TyName Name uni fun () -> PlcFsTree uni fun
plcTermFile String
"MkProdN2" (Term TyName Name DefaultUni DefaultFun ()
 -> FsTree (PlcEntity DefaultUni DefaultFun))
-> Term TyName Name DefaultUni DefaultFun ()
-> FsTree (PlcEntity DefaultUni DefaultFun)
forall a b. (a -> b) -> a -> b
$ Int -> Term TyName Name DefaultUni DefaultFun ()
forall (term :: * -> *) (uni :: * -> *) fun.
TermLike term TyName Name uni fun =>
Int -> term ()
prodNConstructor Int
2
                      ]
                  ]
              ]
          ]
      ]