{-# LANGUAGE OverloadedStrings #-}
module Hydra.Sources.Tier1.Tier1 where
import Prelude hiding ((++))
import qualified Data.List as L
import qualified Data.Map as M
import qualified Data.Set as S
import qualified Data.Maybe as Y
import Hydra.Dsl.Base as Base
import qualified Hydra.Dsl.Core as Core
import qualified Hydra.Dsl.Graph as Graph
import qualified Hydra.Dsl.Lib.Equality as Equality
import qualified Hydra.Dsl.Lib.Flows as Flows
import qualified Hydra.Dsl.Lib.Io as Io
import qualified Hydra.Dsl.Lib.Lists as Lists
import qualified Hydra.Dsl.Lib.Literals as Literals
import qualified Hydra.Dsl.Lib.Logic as Logic
import qualified Hydra.Dsl.Lib.Maps as Maps
import qualified Hydra.Dsl.Lib.Math as Math
import qualified Hydra.Dsl.Lib.Optionals as Optionals
import qualified Hydra.Dsl.Lib.Sets as Sets
import Hydra.Dsl.Lib.Strings as Strings
import qualified Hydra.Dsl.Module as Module
import qualified Hydra.Dsl.Terms as Terms
import qualified Hydra.Dsl.Types as Types
import Hydra.Sources.Tier0.All
import Hydra.Sources.Tier1.Constants
import Hydra.Sources.Tier1.Strip
tier1Definition :: String -> Datum a -> Definition a
tier1Definition :: forall a. String -> Datum a -> Definition a
tier1Definition = Module -> String -> Datum a -> Definition a
forall a. Module -> String -> Datum a -> Definition a
definitionInModule Module
hydraTier1Module
hydraTier1Module :: Module
hydraTier1Module :: Module
hydraTier1Module = Namespace
-> [Element] -> [Module] -> [Module] -> Maybe String -> Module
Module (String -> Namespace
Namespace String
"hydra/tier1") [Element]
elements
[Module
hydraComputeModule, Module
hydraConstantsModule, Module
hydraStripModule] [Module]
tier0Modules (Maybe String -> Module) -> Maybe String -> Module
forall a b. (a -> b) -> a -> b
$
String -> Maybe String
forall a. a -> Maybe a
Just (String
"A module for miscellaneous tier-1 functions and constants.")
where
elements :: [Element]
elements = [
Definition (Double -> Double) -> Element
forall a. Definition a -> Element
el Definition (Double -> Double)
floatValueToBigfloatDef,
Definition (IntegerValue -> Integer) -> Element
forall a. Definition a -> Element
el Definition (IntegerValue -> Integer)
integerValueToBigintDef,
Definition (Term -> Bool) -> Element
forall a. Definition a -> Element
el Definition (Term -> Bool)
isLambdaDef,
Definition (QualifiedName -> Name) -> Element
forall a. Definition a -> Element
el Definition (QualifiedName -> Name)
unqualifyNameDef,
Definition
(TraversalOrder -> (Any -> Term -> Any) -> Any -> Term -> Any)
-> Element
forall a. Definition a -> Element
el Definition
(TraversalOrder -> (Any -> Term -> Any) -> Any -> Term -> Any)
forall x.
Definition (TraversalOrder -> (x -> Term -> x) -> x -> Term -> x)
foldOverTermDef,
Definition
(TraversalOrder -> (Any -> Type -> Any) -> Any -> Type -> Any)
-> Element
forall a. Definition a -> Element
el Definition
(TraversalOrder -> (Any -> Type -> Any) -> Any -> Type -> Any)
forall x.
Definition (TraversalOrder -> (x -> Type -> x) -> x -> Type -> x)
foldOverTypeDef,
Definition (Term -> Set Name) -> Element
forall a. Definition a -> Element
el Definition (Term -> Set Name)
freeVariablesInTermDef,
Definition (Type -> Set Name) -> Element
forall a. Definition a -> Element
el Definition (Type -> Set Name)
freeVariablesInTypeDef,
Definition (Term -> [Term]) -> Element
forall a. Definition a -> Element
el Definition (Term -> [Term])
subtermsDef,
Definition (Type -> [Type]) -> Element
forall a. Definition a -> Element
el Definition (Type -> [Type])
subtypesDef,
Definition Trace -> Element
forall a. Definition a -> Element
el Definition Trace
emptyTraceDef,
Definition (Flow Any Any -> Bool) -> Element
forall a. Definition a -> Element
el Definition (Flow Any Any -> Bool)
forall s a. Definition (Flow s a -> Bool)
flowSucceedsDef,
Definition (Any -> Any -> Flow Any Any -> Any) -> Element
forall a. Definition a -> Element
el Definition (Any -> Any -> Flow Any Any -> Any)
forall a s. Definition (a -> s -> Flow s a -> a)
fromFlowDef,
Definition
((Trace -> Either_ String Trace)
-> (Trace -> Trace -> Trace) -> Flow Any Any -> Flow Any Any)
-> Element
forall a. Definition a -> Element
el Definition
((Trace -> Either_ String Trace)
-> (Trace -> Trace -> Trace) -> Flow Any Any -> Flow Any Any)
forall s a.
Definition
((Trace -> Either_ String Trace)
-> (Trace -> Trace -> Trace) -> Flow s a -> Flow s a)
mutateTraceDef,
Definition (String -> Trace -> Trace) -> Element
forall a. Definition a -> Element
el Definition (String -> Trace -> Trace)
pushErrorDef,
Definition (String -> Flow Any Any -> Flow Any Any) -> Element
forall a. Definition a -> Element
el Definition (String -> Flow Any Any -> Flow Any Any)
forall s a. Definition (String -> Flow s a -> Flow s a)
warnDef,
Definition (String -> Flow Any Any -> Flow Any Any) -> Element
forall a. Definition a -> Element
el Definition (String -> Flow Any Any -> Flow Any Any)
forall s a. Definition (String -> Flow s a -> Flow s a)
withFlagDef,
Definition (Any -> Flow Any Any -> Flow Any Any) -> Element
forall a. Definition a -> Element
el Definition (Any -> Flow Any Any -> Flow Any Any)
forall s1 a s2. Definition (s1 -> Flow s1 a -> Flow s2 a)
withStateDef,
Definition (String -> Flow Any Any -> Flow Any Any) -> Element
forall a. Definition a -> Element
el Definition (String -> Flow Any Any -> Flow Any Any)
forall s a. Definition (String -> Flow s a -> Flow s a)
withTraceDef
]
floatValueToBigfloatDef :: Definition (Double -> Double)
floatValueToBigfloatDef :: Definition (Double -> Double)
floatValueToBigfloatDef = String -> Datum (Double -> Double) -> Definition (Double -> Double)
forall a. String -> Datum a -> Definition a
tier1Definition String
"floatValueToBigfloat" (Datum (Double -> Double) -> Definition (Double -> Double))
-> Datum (Double -> Double) -> Definition (Double -> Double)
forall a b. (a -> b) -> a -> b
$
String -> Datum (Double -> Double) -> Datum (Double -> Double)
forall a. String -> Datum a -> Datum a
doc String
"Convert a floating-point value of any precision to a bigfloat" (Datum (Double -> Double) -> Datum (Double -> Double))
-> Datum (Double -> Double) -> Datum (Double -> Double)
forall a b. (a -> b) -> a -> b
$
Type
-> Type -> Datum (Double -> Double) -> Datum (Double -> Double)
forall a. Type -> Type -> Datum a -> Datum a
function Type
floatValueT Type
Types.bigfloat (Datum (Double -> Double) -> Datum (Double -> Double))
-> Datum (Double -> Double) -> Datum (Double -> Double)
forall a b. (a -> b) -> a -> b
$
Name -> Maybe (Datum Double) -> [Field] -> Datum (Double -> Double)
forall b u. Name -> Maybe (Datum b) -> [Field] -> Datum (u -> b)
match Name
_FloatValue Maybe (Datum Double)
forall a. Maybe a
Nothing [
Name
_FloatValue_bigfloatName -> Datum (Any -> Any) -> Field
forall a. Name -> Datum a -> Field
>>: Datum (Any -> Any)
forall x. Datum (x -> x)
Equality.identity,
Name
_FloatValue_float32Name -> Datum (Float -> Double) -> Field
forall a. Name -> Datum a -> Field
>>: Datum (Float -> Double)
Literals.float32ToBigfloat,
Name
_FloatValue_float64Name -> Datum (Double -> Double) -> Field
forall a. Name -> Datum a -> Field
>>: Datum (Double -> Double)
Literals.float64ToBigfloat]
integerValueToBigintDef :: Definition (IntegerValue -> Integer)
integerValueToBigintDef :: Definition (IntegerValue -> Integer)
integerValueToBigintDef = String
-> Datum (IntegerValue -> Integer)
-> Definition (IntegerValue -> Integer)
forall a. String -> Datum a -> Definition a
tier1Definition String
"integerValueToBigint" (Datum (IntegerValue -> Integer)
-> Definition (IntegerValue -> Integer))
-> Datum (IntegerValue -> Integer)
-> Definition (IntegerValue -> Integer)
forall a b. (a -> b) -> a -> b
$
String
-> Datum (IntegerValue -> Integer)
-> Datum (IntegerValue -> Integer)
forall a. String -> Datum a -> Datum a
doc String
"Convert an integer value of any precision to a bigint" (Datum (IntegerValue -> Integer)
-> Datum (IntegerValue -> Integer))
-> Datum (IntegerValue -> Integer)
-> Datum (IntegerValue -> Integer)
forall a b. (a -> b) -> a -> b
$
Type
-> Type
-> Datum (IntegerValue -> Integer)
-> Datum (IntegerValue -> Integer)
forall a. Type -> Type -> Datum a -> Datum a
function Type
integerValueT Type
Types.bigint (Datum (IntegerValue -> Integer)
-> Datum (IntegerValue -> Integer))
-> Datum (IntegerValue -> Integer)
-> Datum (IntegerValue -> Integer)
forall a b. (a -> b) -> a -> b
$
Name
-> Maybe (Datum Integer)
-> [Field]
-> Datum (IntegerValue -> Integer)
forall b u. Name -> Maybe (Datum b) -> [Field] -> Datum (u -> b)
match Name
_IntegerValue Maybe (Datum Integer)
forall a. Maybe a
Nothing [
Name
_IntegerValue_bigintName -> Datum (Any -> Any) -> Field
forall a. Name -> Datum a -> Field
>>: Datum (Any -> Any)
forall x. Datum (x -> x)
Equality.identity,
Name
_IntegerValue_int8Name -> Datum (Int8 -> Integer) -> Field
forall a. Name -> Datum a -> Field
>>: Datum (Int8 -> Integer)
Literals.int8ToBigint,
Name
_IntegerValue_int16Name -> Datum (Int16 -> Integer) -> Field
forall a. Name -> Datum a -> Field
>>: Datum (Int16 -> Integer)
Literals.int16ToBigint,
Name
_IntegerValue_int32Name -> Datum (Int -> Integer) -> Field
forall a. Name -> Datum a -> Field
>>: Datum (Int -> Integer)
Literals.int32ToBigint,
Name
_IntegerValue_int64Name -> Datum (Int64 -> Integer) -> Field
forall a. Name -> Datum a -> Field
>>: Datum (Int64 -> Integer)
Literals.int64ToBigint,
Name
_IntegerValue_uint8Name -> Datum (Int16 -> Integer) -> Field
forall a. Name -> Datum a -> Field
>>: Datum (Int16 -> Integer)
Literals.uint8ToBigint,
Name
_IntegerValue_uint16Name -> Datum (Int -> Integer) -> Field
forall a. Name -> Datum a -> Field
>>: Datum (Int -> Integer)
Literals.uint16ToBigint,
Name
_IntegerValue_uint32Name -> Datum (Int64 -> Integer) -> Field
forall a. Name -> Datum a -> Field
>>: Datum (Int64 -> Integer)
Literals.uint32ToBigint,
Name
_IntegerValue_uint64Name -> Datum (Integer -> Integer) -> Field
forall a. Name -> Datum a -> Field
>>: Datum (Integer -> Integer)
Literals.uint64ToBigint]
isLambdaDef :: Definition (Term -> Bool)
isLambdaDef :: Definition (Term -> Bool)
isLambdaDef = String -> Datum (Term -> Bool) -> Definition (Term -> Bool)
forall a. String -> Datum a -> Definition a
tier1Definition String
"isLambda" (Datum (Term -> Bool) -> Definition (Term -> Bool))
-> Datum (Term -> Bool) -> Definition (Term -> Bool)
forall a b. (a -> b) -> a -> b
$
String -> Datum (Term -> Bool) -> Datum (Term -> Bool)
forall a. String -> Datum a -> Datum a
doc String
"Check whether a term is a lambda, possibly nested within let and/or annotation terms" (Datum (Term -> Bool) -> Datum (Term -> Bool))
-> Datum (Term -> Bool) -> Datum (Term -> Bool)
forall a b. (a -> b) -> a -> b
$
Type -> Type -> Datum (Term -> Bool) -> Datum (Term -> Bool)
forall a. Type -> Type -> Datum a -> Datum a
function Type
termT Type
Types.boolean (Datum (Term -> Bool) -> Datum (Term -> Bool))
-> Datum (Term -> Bool) -> Datum (Term -> Bool)
forall a b. (a -> b) -> a -> b
$
String -> Datum Bool -> Datum (Term -> Bool)
forall x a b. String -> Datum x -> Datum (a -> b)
lambda String
"term" (Datum Bool -> Datum (Term -> Bool))
-> Datum Bool -> Datum (Term -> Bool)
forall a b. (a -> b) -> a -> b
$ (Name -> Maybe (Datum Bool) -> [Field] -> Datum (Term -> Bool)
forall b u. Name -> Maybe (Datum b) -> [Field] -> Datum (u -> b)
match Name
_Term (Datum Bool -> Maybe (Datum Bool)
forall a. a -> Maybe a
Just Datum Bool
false) [
Name
_Term_functionName -> Datum (Any -> Bool) -> Field
forall a. Name -> Datum a -> Field
>>: Name -> Maybe (Datum Bool) -> [Field] -> Datum (Any -> Bool)
forall b u. Name -> Maybe (Datum b) -> [Field] -> Datum (u -> b)
match Name
_Function (Datum Bool -> Maybe (Datum Bool)
forall a. a -> Maybe a
Just Datum Bool
false) [
Name
_Function_lambdaName -> Datum (Any -> Bool) -> Field
forall a. Name -> Datum a -> Field
>>: Datum Bool -> Datum (Any -> Bool)
forall a b. Datum a -> Datum (b -> a)
constant Datum Bool
true],
Name
_Term_letName -> Datum (Any -> Any) -> Field
forall a. Name -> Datum a -> Field
>>: String -> Datum Bool -> Datum (Any -> Any)
forall x a b. String -> Datum x -> Datum (a -> b)
lambda String
"lt" (Definition (Term -> Bool) -> Datum (Term -> Bool)
forall a. Definition a -> Datum a
ref Definition (Term -> Bool)
isLambdaDef Datum (Term -> Bool) -> Datum Term -> Datum Bool
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ (Name -> Name -> Datum (Any -> Term)
forall a b. Name -> Name -> Datum (a -> b)
project Name
_Let Name
_Let_environment Datum (Any -> Term) -> Datum Any -> Datum Term
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum Any
forall a. String -> Datum a
var String
"lt"))])
Datum (Term -> Bool) -> Datum Term -> Datum Bool
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ (Definition (Term -> Term) -> Datum (Term -> Term)
forall a. Definition a -> Datum a
ref Definition (Term -> Term)
fullyStripTermDef Datum (Term -> Term) -> Datum Term -> Datum Term
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum Term
forall a. String -> Datum a
var String
"term")
foldOverTermDef :: Definition (TraversalOrder -> (x -> Term -> x) -> x -> Term -> x)
foldOverTermDef :: forall x.
Definition (TraversalOrder -> (x -> Term -> x) -> x -> Term -> x)
foldOverTermDef = String
-> Datum (TraversalOrder -> (x -> Term -> x) -> x -> Term -> x)
-> Definition
(TraversalOrder -> (x -> Term -> x) -> x -> Term -> x)
forall a. String -> Datum a -> Definition a
tier1Definition String
"foldOverTerm" (Datum (TraversalOrder -> (x -> Term -> x) -> x -> Term -> x)
-> Definition
(TraversalOrder -> (x -> Term -> x) -> x -> Term -> x))
-> Datum (TraversalOrder -> (x -> Term -> x) -> x -> Term -> x)
-> Definition
(TraversalOrder -> (x -> Term -> x) -> x -> Term -> x)
forall a b. (a -> b) -> a -> b
$
String
-> Datum (TraversalOrder -> (x -> Term -> x) -> x -> Term -> x)
-> Datum (TraversalOrder -> (x -> Term -> x) -> x -> Term -> x)
forall a. String -> Datum a -> Datum a
doc String
"Fold over a term, traversing its subterms in the specified order" (Datum (TraversalOrder -> (x -> Term -> x) -> x -> Term -> x)
-> Datum (TraversalOrder -> (x -> Term -> x) -> x -> Term -> x))
-> Datum (TraversalOrder -> (x -> Term -> x) -> x -> Term -> x)
-> Datum (TraversalOrder -> (x -> Term -> x) -> x -> Term -> x)
forall a b. (a -> b) -> a -> b
$
[Type]
-> Datum (TraversalOrder -> (x -> Term -> x) -> x -> Term -> x)
-> Datum (TraversalOrder -> (x -> Term -> x) -> x -> Term -> x)
forall a. [Type] -> Datum a -> Datum a
functionN [Name -> Type
TypeVariable Name
_TraversalOrder, Type -> Type -> Type
funT Type
xT (Type -> Type -> Type
funT Type
termT Type
xT), Type
xT, Type
termT, Type
xT] (Datum (TraversalOrder -> (x -> Term -> x) -> x -> Term -> x)
-> Datum (TraversalOrder -> (x -> Term -> x) -> x -> Term -> x))
-> Datum (TraversalOrder -> (x -> Term -> x) -> x -> Term -> x)
-> Datum (TraversalOrder -> (x -> Term -> x) -> x -> Term -> x)
forall a b. (a -> b) -> a -> b
$
String
-> Datum (Any -> Any)
-> Datum (TraversalOrder -> (x -> Term -> x) -> x -> Term -> x)
forall x a b. String -> Datum x -> Datum (a -> b)
lambda String
"order" (Datum (Any -> Any)
-> Datum (TraversalOrder -> (x -> Term -> x) -> x -> Term -> x))
-> Datum (Any -> Any)
-> Datum (TraversalOrder -> (x -> Term -> x) -> x -> Term -> x)
forall a b. (a -> b) -> a -> b
$ String -> Datum (Any -> Any) -> Datum (Any -> Any)
forall x a b. String -> Datum x -> Datum (a -> b)
lambda String
"fld" (Datum (Any -> Any) -> Datum (Any -> Any))
-> Datum (Any -> Any) -> Datum (Any -> Any)
forall a b. (a -> b) -> a -> b
$ String -> Datum (Any -> Any) -> Datum (Any -> Any)
forall x a b. String -> Datum x -> Datum (a -> b)
lambda String
"b0" (Datum (Any -> Any) -> Datum (Any -> Any))
-> Datum (Any -> Any) -> Datum (Any -> Any)
forall a b. (a -> b) -> a -> b
$ String -> Datum Any -> Datum (Any -> Any)
forall x a b. String -> Datum x -> Datum (a -> b)
lambda String
"term" (Datum Any -> Datum (Any -> Any))
-> Datum Any -> Datum (Any -> Any)
forall a b. (a -> b) -> a -> b
$ (Name -> Maybe (Datum Any) -> [Field] -> Datum (Any -> Any)
forall b u. Name -> Maybe (Datum b) -> [Field] -> Datum (u -> b)
match Name
_TraversalOrder Maybe (Datum Any)
forall a. Maybe a
Nothing [
Name
_TraversalOrder_preName -> Datum (Any -> Any) -> Field
forall a. Name -> Datum a -> Field
>>: Datum Any -> Datum (Any -> Any)
forall a b. Datum a -> Datum (b -> a)
constant (Datum (Any -> Term -> Any) -> Datum (Any -> [Term] -> Any)
forall b a. Datum (b -> a -> b) -> Datum (b -> [a] -> b)
Base.fold (Definition
(TraversalOrder -> (Any -> Term -> Any) -> Any -> Term -> Any)
-> Datum
(TraversalOrder -> (Any -> Term -> Any) -> Any -> Term -> Any)
forall a. Definition a -> Datum a
ref Definition
(TraversalOrder -> (Any -> Term -> Any) -> Any -> Term -> Any)
forall x.
Definition (TraversalOrder -> (x -> Term -> x) -> x -> Term -> x)
foldOverTermDef Datum
(TraversalOrder -> (Any -> Term -> Any) -> Any -> Term -> Any)
-> Datum TraversalOrder
-> Datum ((Any -> Term -> Any) -> Any -> Term -> Any)
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum TraversalOrder
forall a. String -> Datum a
var String
"order" Datum ((Any -> Term -> Any) -> Any -> Term -> Any)
-> Datum (Any -> Term -> Any) -> Datum (Any -> Term -> Any)
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum (Any -> Term -> Any)
forall a. String -> Datum a
var String
"fld")
Datum (Any -> [Term] -> Any) -> Datum Any -> Datum ([Term] -> Any)
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ (String -> Datum (Any -> Any -> Any)
forall a. String -> Datum a
var String
"fld" Datum (Any -> Any -> Any) -> Datum Any -> Datum (Any -> Any)
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum Any
forall a. String -> Datum a
var String
"b0" Datum (Any -> Any) -> Datum Any -> Datum Any
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum Any
forall a. String -> Datum a
var String
"term")
Datum ([Term] -> Any) -> Datum [Term] -> Datum Any
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ (Definition (Term -> [Term]) -> Datum (Term -> [Term])
forall a. Definition a -> Datum a
ref Definition (Term -> [Term])
subtermsDef Datum (Term -> [Term]) -> Datum Term -> Datum [Term]
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum Term
forall a. String -> Datum a
var String
"term")),
Name
_TraversalOrder_postName -> Datum (Any -> Any) -> Field
forall a. Name -> Datum a -> Field
>>: Datum Any -> Datum (Any -> Any)
forall a b. Datum a -> Datum (b -> a)
constant (String -> Datum (Any -> Any -> Any)
forall a. String -> Datum a
var String
"fld"
Datum (Any -> Any -> Any) -> Datum Any -> Datum (Any -> Any)
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ (Datum (Any -> Term -> Any) -> Datum (Any -> [Term] -> Any)
forall b a. Datum (b -> a -> b) -> Datum (b -> [a] -> b)
Base.fold (Definition
(TraversalOrder -> (Any -> Term -> Any) -> Any -> Term -> Any)
-> Datum
(TraversalOrder -> (Any -> Term -> Any) -> Any -> Term -> Any)
forall a. Definition a -> Datum a
ref Definition
(TraversalOrder -> (Any -> Term -> Any) -> Any -> Term -> Any)
forall x.
Definition (TraversalOrder -> (x -> Term -> x) -> x -> Term -> x)
foldOverTermDef Datum
(TraversalOrder -> (Any -> Term -> Any) -> Any -> Term -> Any)
-> Datum TraversalOrder
-> Datum ((Any -> Term -> Any) -> Any -> Term -> Any)
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum TraversalOrder
forall a. String -> Datum a
var String
"order" Datum ((Any -> Term -> Any) -> Any -> Term -> Any)
-> Datum (Any -> Term -> Any) -> Datum (Any -> Term -> Any)
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum (Any -> Term -> Any)
forall a. String -> Datum a
var String
"fld")
Datum (Any -> [Term] -> Any) -> Datum Any -> Datum ([Term] -> Any)
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ (String -> Datum Any
forall a. String -> Datum a
var String
"b0")
Datum ([Term] -> Any) -> Datum [Term] -> Datum Any
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ (Definition (Term -> [Term]) -> Datum (Term -> [Term])
forall a. Definition a -> Datum a
ref Definition (Term -> [Term])
subtermsDef Datum (Term -> [Term]) -> Datum Term -> Datum [Term]
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum Term
forall a. String -> Datum a
var String
"term"))
Datum (Any -> Any) -> Datum Any -> Datum Any
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum Any
forall a. String -> Datum a
var String
"term")] Datum (Any -> Any) -> Datum Any -> Datum Any
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum Any
forall a. String -> Datum a
var String
"order")
foldOverTypeDef :: Definition (TraversalOrder -> (x -> Type -> x) -> x -> Type -> x)
foldOverTypeDef :: forall x.
Definition (TraversalOrder -> (x -> Type -> x) -> x -> Type -> x)
foldOverTypeDef = String
-> Datum (TraversalOrder -> (x -> Type -> x) -> x -> Type -> x)
-> Definition
(TraversalOrder -> (x -> Type -> x) -> x -> Type -> x)
forall a. String -> Datum a -> Definition a
tier1Definition String
"foldOverType" (Datum (TraversalOrder -> (x -> Type -> x) -> x -> Type -> x)
-> Definition
(TraversalOrder -> (x -> Type -> x) -> x -> Type -> x))
-> Datum (TraversalOrder -> (x -> Type -> x) -> x -> Type -> x)
-> Definition
(TraversalOrder -> (x -> Type -> x) -> x -> Type -> x)
forall a b. (a -> b) -> a -> b
$
String
-> Datum (TraversalOrder -> (x -> Type -> x) -> x -> Type -> x)
-> Datum (TraversalOrder -> (x -> Type -> x) -> x -> Type -> x)
forall a. String -> Datum a -> Datum a
doc String
"Fold over a type, traversing its subtypes in the specified order" (Datum (TraversalOrder -> (x -> Type -> x) -> x -> Type -> x)
-> Datum (TraversalOrder -> (x -> Type -> x) -> x -> Type -> x))
-> Datum (TraversalOrder -> (x -> Type -> x) -> x -> Type -> x)
-> Datum (TraversalOrder -> (x -> Type -> x) -> x -> Type -> x)
forall a b. (a -> b) -> a -> b
$
[Type]
-> Datum (TraversalOrder -> (x -> Type -> x) -> x -> Type -> x)
-> Datum (TraversalOrder -> (x -> Type -> x) -> x -> Type -> x)
forall a. [Type] -> Datum a -> Datum a
functionN [Name -> Type
TypeVariable Name
_TraversalOrder, Type -> Type -> Type
funT Type
xT (Type -> Type -> Type
funT Type
typeT Type
xT), Type
xT, Type
typeT, Type
xT] (Datum (TraversalOrder -> (x -> Type -> x) -> x -> Type -> x)
-> Datum (TraversalOrder -> (x -> Type -> x) -> x -> Type -> x))
-> Datum (TraversalOrder -> (x -> Type -> x) -> x -> Type -> x)
-> Datum (TraversalOrder -> (x -> Type -> x) -> x -> Type -> x)
forall a b. (a -> b) -> a -> b
$
String
-> Datum (Any -> Any)
-> Datum (TraversalOrder -> (x -> Type -> x) -> x -> Type -> x)
forall x a b. String -> Datum x -> Datum (a -> b)
lambda String
"order" (Datum (Any -> Any)
-> Datum (TraversalOrder -> (x -> Type -> x) -> x -> Type -> x))
-> Datum (Any -> Any)
-> Datum (TraversalOrder -> (x -> Type -> x) -> x -> Type -> x)
forall a b. (a -> b) -> a -> b
$ String -> Datum (Any -> Any) -> Datum (Any -> Any)
forall x a b. String -> Datum x -> Datum (a -> b)
lambda String
"fld" (Datum (Any -> Any) -> Datum (Any -> Any))
-> Datum (Any -> Any) -> Datum (Any -> Any)
forall a b. (a -> b) -> a -> b
$ String -> Datum (Any -> Any) -> Datum (Any -> Any)
forall x a b. String -> Datum x -> Datum (a -> b)
lambda String
"b0" (Datum (Any -> Any) -> Datum (Any -> Any))
-> Datum (Any -> Any) -> Datum (Any -> Any)
forall a b. (a -> b) -> a -> b
$ String -> Datum Any -> Datum (Any -> Any)
forall x a b. String -> Datum x -> Datum (a -> b)
lambda String
"typ" (Datum Any -> Datum (Any -> Any))
-> Datum Any -> Datum (Any -> Any)
forall a b. (a -> b) -> a -> b
$ (Name -> Maybe (Datum Any) -> [Field] -> Datum (Any -> Any)
forall b u. Name -> Maybe (Datum b) -> [Field] -> Datum (u -> b)
match Name
_TraversalOrder Maybe (Datum Any)
forall a. Maybe a
Nothing [
Name
_TraversalOrder_preName -> Datum (Any -> Any) -> Field
forall a. Name -> Datum a -> Field
>>: Datum Any -> Datum (Any -> Any)
forall a b. Datum a -> Datum (b -> a)
constant (Datum (Any -> Type -> Any) -> Datum (Any -> [Type] -> Any)
forall b a. Datum (b -> a -> b) -> Datum (b -> [a] -> b)
Base.fold (Definition
(TraversalOrder -> (Any -> Type -> Any) -> Any -> Type -> Any)
-> Datum
(TraversalOrder -> (Any -> Type -> Any) -> Any -> Type -> Any)
forall a. Definition a -> Datum a
ref Definition
(TraversalOrder -> (Any -> Type -> Any) -> Any -> Type -> Any)
forall x.
Definition (TraversalOrder -> (x -> Type -> x) -> x -> Type -> x)
foldOverTypeDef Datum
(TraversalOrder -> (Any -> Type -> Any) -> Any -> Type -> Any)
-> Datum TraversalOrder
-> Datum ((Any -> Type -> Any) -> Any -> Type -> Any)
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum TraversalOrder
forall a. String -> Datum a
var String
"order" Datum ((Any -> Type -> Any) -> Any -> Type -> Any)
-> Datum (Any -> Type -> Any) -> Datum (Any -> Type -> Any)
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum (Any -> Type -> Any)
forall a. String -> Datum a
var String
"fld")
Datum (Any -> [Type] -> Any) -> Datum Any -> Datum ([Type] -> Any)
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ (String -> Datum (Any -> Any -> Any)
forall a. String -> Datum a
var String
"fld" Datum (Any -> Any -> Any) -> Datum Any -> Datum (Any -> Any)
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum Any
forall a. String -> Datum a
var String
"b0" Datum (Any -> Any) -> Datum Any -> Datum Any
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum Any
forall a. String -> Datum a
var String
"typ")
Datum ([Type] -> Any) -> Datum [Type] -> Datum Any
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ (Definition (Type -> [Type]) -> Datum (Type -> [Type])
forall a. Definition a -> Datum a
ref Definition (Type -> [Type])
subtypesDef Datum (Type -> [Type]) -> Datum Type -> Datum [Type]
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum Type
forall a. String -> Datum a
var String
"typ")),
Name
_TraversalOrder_postName -> Datum (Any -> Any) -> Field
forall a. Name -> Datum a -> Field
>>: Datum Any -> Datum (Any -> Any)
forall a b. Datum a -> Datum (b -> a)
constant (String -> Datum (Any -> Any -> Any)
forall a. String -> Datum a
var String
"fld"
Datum (Any -> Any -> Any) -> Datum Any -> Datum (Any -> Any)
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ (Datum (Any -> Type -> Any) -> Datum (Any -> [Type] -> Any)
forall b a. Datum (b -> a -> b) -> Datum (b -> [a] -> b)
Base.fold (Definition
(TraversalOrder -> (Any -> Type -> Any) -> Any -> Type -> Any)
-> Datum
(TraversalOrder -> (Any -> Type -> Any) -> Any -> Type -> Any)
forall a. Definition a -> Datum a
ref Definition
(TraversalOrder -> (Any -> Type -> Any) -> Any -> Type -> Any)
forall x.
Definition (TraversalOrder -> (x -> Type -> x) -> x -> Type -> x)
foldOverTypeDef Datum
(TraversalOrder -> (Any -> Type -> Any) -> Any -> Type -> Any)
-> Datum TraversalOrder
-> Datum ((Any -> Type -> Any) -> Any -> Type -> Any)
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum TraversalOrder
forall a. String -> Datum a
var String
"order" Datum ((Any -> Type -> Any) -> Any -> Type -> Any)
-> Datum (Any -> Type -> Any) -> Datum (Any -> Type -> Any)
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum (Any -> Type -> Any)
forall a. String -> Datum a
var String
"fld")
Datum (Any -> [Type] -> Any) -> Datum Any -> Datum ([Type] -> Any)
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ (String -> Datum Any
forall a. String -> Datum a
var String
"b0")
Datum ([Type] -> Any) -> Datum [Type] -> Datum Any
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ (Definition (Type -> [Type]) -> Datum (Type -> [Type])
forall a. Definition a -> Datum a
ref Definition (Type -> [Type])
subtypesDef Datum (Type -> [Type]) -> Datum Type -> Datum [Type]
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum Type
forall a. String -> Datum a
var String
"typ"))
Datum (Any -> Any) -> Datum Any -> Datum Any
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum Any
forall a. String -> Datum a
var String
"typ")] Datum (Any -> Any) -> Datum Any -> Datum Any
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum Any
forall a. String -> Datum a
var String
"order")
freeVariablesInTermDef :: Definition (Term -> S.Set Name)
freeVariablesInTermDef :: Definition (Term -> Set Name)
freeVariablesInTermDef = String -> Datum (Term -> Set Name) -> Definition (Term -> Set Name)
forall a. String -> Datum a -> Definition a
tier1Definition String
"freeVariablesInTerm" (Datum (Term -> Set Name) -> Definition (Term -> Set Name))
-> Datum (Term -> Set Name) -> Definition (Term -> Set Name)
forall a b. (a -> b) -> a -> b
$
String -> Datum (Term -> Set Name) -> Datum (Term -> Set Name)
forall a. String -> Datum a -> Datum a
doc String
"Find the free variables (i.e. variables not bound by a lambda or let) in a term" (Datum (Term -> Set Name) -> Datum (Term -> Set Name))
-> Datum (Term -> Set Name) -> Datum (Term -> Set Name)
forall a b. (a -> b) -> a -> b
$
Type
-> Type -> Datum (Term -> Set Name) -> Datum (Term -> Set Name)
forall a. Type -> Type -> Datum a -> Datum a
function Type
termT (Type -> Type
setT Type
nameT) (Datum (Term -> Set Name) -> Datum (Term -> Set Name))
-> Datum (Term -> Set Name) -> Datum (Term -> Set Name)
forall a b. (a -> b) -> a -> b
$
String -> Datum Any -> Datum (Term -> Set Name)
forall x a b. String -> Datum x -> Datum (a -> b)
lambda String
"term" (
(Name -> Maybe (Datum Any) -> [Field] -> Datum (Any -> Any)
forall b u. Name -> Maybe (Datum b) -> [Field] -> Datum (u -> b)
match Name
_Term (Datum Any -> Maybe (Datum Any)
forall a. a -> Maybe a
Just (Datum Any -> Maybe (Datum Any)) -> Datum Any -> Maybe (Datum Any)
forall a b. (a -> b) -> a -> b
$ String -> Datum Any
forall a. String -> Datum a
var String
"dfltVars") [
Name
_Term_functionName -> Datum (Any -> Any) -> Field
forall a. Name -> Datum a -> Field
>>: Name -> Maybe (Datum Any) -> [Field] -> Datum (Any -> Any)
forall b u. Name -> Maybe (Datum b) -> [Field] -> Datum (u -> b)
match Name
_Function (Datum Any -> Maybe (Datum Any)
forall a. a -> Maybe a
Just (Datum Any -> Maybe (Datum Any)) -> Datum Any -> Maybe (Datum Any)
forall a b. (a -> b) -> a -> b
$ String -> Datum Any
forall a. String -> Datum a
var String
"dfltVars") [
Name
_Function_lambdaName -> Datum (Any -> Any) -> Field
forall a. Name -> Datum a -> Field
>>: String -> Datum (Set Name) -> Datum (Any -> Any)
forall x a b. String -> Datum x -> Datum (a -> b)
lambda String
"l" (Datum (Name -> Set Name -> Set Name)
forall a. Datum (a -> Set a -> Set a)
Sets.remove
Datum (Name -> Set Name -> Set Name)
-> Datum Name -> Datum (Set Name -> Set Name)
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ (Datum (Lambda -> Name)
Core.lambdaParameter Datum (Lambda -> Name) -> Datum Lambda -> Datum Name
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum Lambda
forall a. String -> Datum a
var String
"l")
Datum (Set Name -> Set Name)
-> Datum (Set Name) -> Datum (Set Name)
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ (Definition (Term -> Set Name) -> Datum (Term -> Set Name)
forall a. Definition a -> Datum a
ref Definition (Term -> Set Name)
freeVariablesInTermDef Datum (Term -> Set Name) -> Datum Term -> Datum (Set Name)
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ (Datum (Lambda -> Term)
Core.lambdaBody Datum (Lambda -> Term) -> Datum Lambda -> Datum Term
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum Lambda
forall a. String -> Datum a
var String
"l")))],
Name
_Term_variableName -> Datum (Any -> Any) -> Field
forall a. Name -> Datum a -> Field
>>: String -> Datum (Set Any) -> Datum (Any -> Any)
forall x a b. String -> Datum x -> Datum (a -> b)
lambda String
"v" (Datum (Any -> Set Any)
forall a. Datum (a -> Set a)
Sets.singleton Datum (Any -> Set Any) -> Datum Any -> Datum (Set Any)
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum Any
forall a. String -> Datum a
var String
"v")] Datum (Any -> Any) -> Datum Any -> Datum Any
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum Any
forall a. String -> Datum a
var String
"term")
Datum Any -> [Field] -> Datum Any
forall a. Datum a -> [Field] -> Datum a
`with` [
String
"dfltVars"String -> Datum (Set Any) -> Field
forall a. String -> Datum a -> Field
>: Type -> Datum (Set Any) -> Datum (Set Any)
forall a. Type -> Datum a -> Datum a
typed (Type -> Type
setT Type
nameT) (Datum (Set Any) -> Datum (Set Any))
-> Datum (Set Any) -> Datum (Set Any)
forall a b. (a -> b) -> a -> b
$ Datum (Set Any -> Term -> Set Any)
-> Datum (Set Any -> [Term] -> Set Any)
forall b a. Datum (b -> a -> b) -> Datum (b -> [a] -> b)
Base.fold (String -> Datum (Any -> Any) -> Datum (Set Any -> Term -> Set Any)
forall x a b. String -> Datum x -> Datum (a -> b)
lambda String
"s" (Datum (Any -> Any) -> Datum (Set Any -> Term -> Set Any))
-> Datum (Any -> Any) -> Datum (Set Any -> Term -> Set Any)
forall a b. (a -> b) -> a -> b
$ String -> Datum (Set Name) -> Datum (Any -> Any)
forall x a b. String -> Datum x -> Datum (a -> b)
lambda String
"t" (Datum (Set Name) -> Datum (Any -> Any))
-> Datum (Set Name) -> Datum (Any -> Any)
forall a b. (a -> b) -> a -> b
$ Datum (Set Name -> Set Name -> Set Name)
forall a. Datum (Set a -> Set a -> Set a)
Sets.union Datum (Set Name -> Set Name -> Set Name)
-> Datum (Set Name) -> Datum (Set Name -> Set Name)
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum (Set Name)
forall a. String -> Datum a
var String
"s" Datum (Set Name -> Set Name)
-> Datum (Set Name) -> Datum (Set Name)
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ (Definition (Term -> Set Name) -> Datum (Term -> Set Name)
forall a. Definition a -> Datum a
ref Definition (Term -> Set Name)
freeVariablesInTermDef Datum (Term -> Set Name) -> Datum Term -> Datum (Set Name)
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum Term
forall a. String -> Datum a
var String
"t"))
Datum (Set Any -> [Term] -> Set Any)
-> Datum (Set Any) -> Datum ([Term] -> Set Any)
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ Datum (Set Any)
forall a. Datum (Set a)
Sets.empty
Datum ([Term] -> Set Any) -> Datum [Term] -> Datum (Set Any)
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ (Definition (Term -> [Term]) -> Datum (Term -> [Term])
forall a. Definition a -> Datum a
ref Definition (Term -> [Term])
subtermsDef Datum (Term -> [Term]) -> Datum Term -> Datum [Term]
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum Term
forall a. String -> Datum a
var String
"term")])
freeVariablesInTypeDef :: Definition (Type -> S.Set Name)
freeVariablesInTypeDef :: Definition (Type -> Set Name)
freeVariablesInTypeDef = String -> Datum (Type -> Set Name) -> Definition (Type -> Set Name)
forall a. String -> Datum a -> Definition a
tier1Definition String
"freeVariablesInType" (Datum (Type -> Set Name) -> Definition (Type -> Set Name))
-> Datum (Type -> Set Name) -> Definition (Type -> Set Name)
forall a b. (a -> b) -> a -> b
$
String -> Datum (Type -> Set Name) -> Datum (Type -> Set Name)
forall a. String -> Datum a -> Datum a
doc String
"Find the free variables (i.e. variables not bound by a lambda or let) in a type" (Datum (Type -> Set Name) -> Datum (Type -> Set Name))
-> Datum (Type -> Set Name) -> Datum (Type -> Set Name)
forall a b. (a -> b) -> a -> b
$
Type
-> Type -> Datum (Type -> Set Name) -> Datum (Type -> Set Name)
forall a. Type -> Type -> Datum a -> Datum a
function Type
typeT (Type -> Type
setT Type
nameT) (Datum (Type -> Set Name) -> Datum (Type -> Set Name))
-> Datum (Type -> Set Name) -> Datum (Type -> Set Name)
forall a b. (a -> b) -> a -> b
$
String -> Datum Any -> Datum (Type -> Set Name)
forall x a b. String -> Datum x -> Datum (a -> b)
lambda String
"typ" (
(Name -> Maybe (Datum Any) -> [Field] -> Datum (Any -> Any)
forall b u. Name -> Maybe (Datum b) -> [Field] -> Datum (u -> b)
match Name
_Type (Datum Any -> Maybe (Datum Any)
forall a. a -> Maybe a
Just (Datum Any -> Maybe (Datum Any)) -> Datum Any -> Maybe (Datum Any)
forall a b. (a -> b) -> a -> b
$ String -> Datum Any
forall a. String -> Datum a
var String
"dfltVars") [
Name
_Type_lambdaName -> Datum (Any -> Any) -> Field
forall a. Name -> Datum a -> Field
>>: String -> Datum (Set Name) -> Datum (Any -> Any)
forall x a b. String -> Datum x -> Datum (a -> b)
lambda String
"lt" (Datum (Name -> Set Name -> Set Name)
forall a. Datum (a -> Set a -> Set a)
Sets.remove
Datum (Name -> Set Name -> Set Name)
-> Datum Name -> Datum (Set Name -> Set Name)
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ (Datum (LambdaType -> Name)
Core.lambdaTypeParameter Datum (LambdaType -> Name) -> Datum LambdaType -> Datum Name
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum LambdaType
forall a. String -> Datum a
var String
"lt")
Datum (Set Name -> Set Name)
-> Datum (Set Name) -> Datum (Set Name)
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ (Definition (Type -> Set Name) -> Datum (Type -> Set Name)
forall a. Definition a -> Datum a
ref Definition (Type -> Set Name)
freeVariablesInTypeDef Datum (Type -> Set Name) -> Datum Type -> Datum (Set Name)
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ (Datum (LambdaType -> Type)
Core.lambdaTypeBody Datum (LambdaType -> Type) -> Datum LambdaType -> Datum Type
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum LambdaType
forall a. String -> Datum a
var String
"lt"))),
Name
_Type_variableName -> Datum (Any -> Any) -> Field
forall a. Name -> Datum a -> Field
>>: String -> Datum (Set Any) -> Datum (Any -> Any)
forall x a b. String -> Datum x -> Datum (a -> b)
lambda String
"v" (Datum (Any -> Set Any)
forall a. Datum (a -> Set a)
Sets.singleton Datum (Any -> Set Any) -> Datum Any -> Datum (Set Any)
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum Any
forall a. String -> Datum a
var String
"v")] Datum (Any -> Any) -> Datum Any -> Datum Any
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum Any
forall a. String -> Datum a
var String
"typ")
Datum Any -> [Field] -> Datum Any
forall a. Datum a -> [Field] -> Datum a
`with` [
String
"dfltVars"String -> Datum (Set Any) -> Field
forall a. String -> Datum a -> Field
>: Type -> Datum (Set Any) -> Datum (Set Any)
forall a. Type -> Datum a -> Datum a
typed (Type -> Type
setT Type
nameT) (Datum (Set Any) -> Datum (Set Any))
-> Datum (Set Any) -> Datum (Set Any)
forall a b. (a -> b) -> a -> b
$ Datum (Set Any -> Type -> Set Any)
-> Datum (Set Any -> [Type] -> Set Any)
forall b a. Datum (b -> a -> b) -> Datum (b -> [a] -> b)
Base.fold (String -> Datum (Any -> Any) -> Datum (Set Any -> Type -> Set Any)
forall x a b. String -> Datum x -> Datum (a -> b)
lambda String
"s" (Datum (Any -> Any) -> Datum (Set Any -> Type -> Set Any))
-> Datum (Any -> Any) -> Datum (Set Any -> Type -> Set Any)
forall a b. (a -> b) -> a -> b
$ String -> Datum (Set Name) -> Datum (Any -> Any)
forall x a b. String -> Datum x -> Datum (a -> b)
lambda String
"t" (Datum (Set Name) -> Datum (Any -> Any))
-> Datum (Set Name) -> Datum (Any -> Any)
forall a b. (a -> b) -> a -> b
$ Datum (Set Name -> Set Name -> Set Name)
forall a. Datum (Set a -> Set a -> Set a)
Sets.union Datum (Set Name -> Set Name -> Set Name)
-> Datum (Set Name) -> Datum (Set Name -> Set Name)
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum (Set Name)
forall a. String -> Datum a
var String
"s" Datum (Set Name -> Set Name)
-> Datum (Set Name) -> Datum (Set Name)
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ (Definition (Type -> Set Name) -> Datum (Type -> Set Name)
forall a. Definition a -> Datum a
ref Definition (Type -> Set Name)
freeVariablesInTypeDef Datum (Type -> Set Name) -> Datum Type -> Datum (Set Name)
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum Type
forall a. String -> Datum a
var String
"t"))
Datum (Set Any -> [Type] -> Set Any)
-> Datum (Set Any) -> Datum ([Type] -> Set Any)
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ Datum (Set Any)
forall a. Datum (Set a)
Sets.empty
Datum ([Type] -> Set Any) -> Datum [Type] -> Datum (Set Any)
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ (Definition (Type -> [Type]) -> Datum (Type -> [Type])
forall a. Definition a -> Datum a
ref Definition (Type -> [Type])
subtypesDef Datum (Type -> [Type]) -> Datum Type -> Datum [Type]
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum Type
forall a. String -> Datum a
var String
"typ")])
subtermsDef :: Definition (Term -> [Term])
subtermsDef :: Definition (Term -> [Term])
subtermsDef = String -> Datum (Term -> [Term]) -> Definition (Term -> [Term])
forall a. String -> Datum a -> Definition a
tier1Definition String
"subterms" (Datum (Term -> [Term]) -> Definition (Term -> [Term]))
-> Datum (Term -> [Term]) -> Definition (Term -> [Term])
forall a b. (a -> b) -> a -> b
$
String -> Datum (Term -> [Term]) -> Datum (Term -> [Term])
forall a. String -> Datum a -> Datum a
doc String
"Find the children of a given term" (Datum (Term -> [Term]) -> Datum (Term -> [Term]))
-> Datum (Term -> [Term]) -> Datum (Term -> [Term])
forall a b. (a -> b) -> a -> b
$
Type -> Type -> Datum (Term -> [Term]) -> Datum (Term -> [Term])
forall a. Type -> Type -> Datum a -> Datum a
function Type
termT (Type -> Type
listT Type
termT) (Datum (Term -> [Term]) -> Datum (Term -> [Term]))
-> Datum (Term -> [Term]) -> Datum (Term -> [Term])
forall a b. (a -> b) -> a -> b
$
Name -> Maybe (Datum [Term]) -> [Field] -> Datum (Term -> [Term])
forall b u. Name -> Maybe (Datum b) -> [Field] -> Datum (u -> b)
match Name
_Term Maybe (Datum [Term])
forall a. Maybe a
Nothing [
Name
_Term_annotatedName -> Datum (Any -> Any) -> Field
forall a. Name -> Datum a -> Field
>>: String -> Datum [Term] -> Datum (Any -> Any)
forall x a b. String -> Datum x -> Datum (a -> b)
lambda String
"at" (Datum [Term] -> Datum (Any -> Any))
-> Datum [Term] -> Datum (Any -> Any)
forall a b. (a -> b) -> a -> b
$ [Datum Term] -> Datum [Term]
forall a. [Datum a] -> Datum [a]
list [Datum (AnnotatedTerm -> Term)
Core.annotatedTermSubject Datum (AnnotatedTerm -> Term) -> Datum AnnotatedTerm -> Datum Term
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum AnnotatedTerm
forall a. String -> Datum a
var String
"at"],
Name
_Term_applicationName -> Datum (Any -> Any) -> Field
forall a. Name -> Datum a -> Field
>>: String -> Datum [Term] -> Datum (Any -> Any)
forall x a b. String -> Datum x -> Datum (a -> b)
lambda String
"p" (Datum [Term] -> Datum (Any -> Any))
-> Datum [Term] -> Datum (Any -> Any)
forall a b. (a -> b) -> a -> b
$ [Datum Term] -> Datum [Term]
forall a. [Datum a] -> Datum [a]
list [
Datum (Application -> Term)
Core.applicationFunction Datum (Application -> Term) -> Datum Application -> Datum Term
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum Application
forall a. String -> Datum a
var String
"p",
Datum (Application -> Term)
Core.applicationArgument Datum (Application -> Term) -> Datum Application -> Datum Term
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum Application
forall a. String -> Datum a
var String
"p"],
Name
_Term_functionName -> Datum (Any -> [Any]) -> Field
forall a. Name -> Datum a -> Field
>>: Name -> Maybe (Datum [Any]) -> [Field] -> Datum (Any -> [Any])
forall b u. Name -> Maybe (Datum b) -> [Field] -> Datum (u -> b)
match Name
_Function (Datum [Any] -> Maybe (Datum [Any])
forall a. a -> Maybe a
Just (Datum [Any] -> Maybe (Datum [Any]))
-> Datum [Any] -> Maybe (Datum [Any])
forall a b. (a -> b) -> a -> b
$ [Datum Any] -> Datum [Any]
forall a. [Datum a] -> Datum [a]
list []) [
Name
_Function_eliminationName -> Datum (Any -> [Any]) -> Field
forall a. Name -> Datum a -> Field
>>: Name -> Maybe (Datum [Any]) -> [Field] -> Datum (Any -> [Any])
forall b u. Name -> Maybe (Datum b) -> [Field] -> Datum (u -> b)
match Name
_Elimination (Datum [Any] -> Maybe (Datum [Any])
forall a. a -> Maybe a
Just (Datum [Any] -> Maybe (Datum [Any]))
-> Datum [Any] -> Maybe (Datum [Any])
forall a b. (a -> b) -> a -> b
$ [Datum Any] -> Datum [Any]
forall a. [Datum a] -> Datum [a]
list []) [
Name
_Elimination_listName -> Datum (Any -> Any) -> Field
forall a. Name -> Datum a -> Field
>>: String -> Datum [Any] -> Datum (Any -> Any)
forall x a b. String -> Datum x -> Datum (a -> b)
lambda String
"fld" (Datum [Any] -> Datum (Any -> Any))
-> Datum [Any] -> Datum (Any -> Any)
forall a b. (a -> b) -> a -> b
$ [Datum Any] -> Datum [Any]
forall a. [Datum a] -> Datum [a]
list [String -> Datum Any
forall a. String -> Datum a
var String
"fld"],
Name
_Elimination_optionalName -> Datum (Any -> Any) -> Field
forall a. Name -> Datum a -> Field
>>: String -> Datum [Term] -> Datum (Any -> Any)
forall x a b. String -> Datum x -> Datum (a -> b)
lambda String
"oc" (Datum [Term] -> Datum (Any -> Any))
-> Datum [Term] -> Datum (Any -> Any)
forall a b. (a -> b) -> a -> b
$ [Datum Term] -> Datum [Term]
forall a. [Datum a] -> Datum [a]
list [
Datum (OptionalCases -> Term)
Core.optionalCasesNothing Datum (OptionalCases -> Term) -> Datum OptionalCases -> Datum Term
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum OptionalCases
forall a. String -> Datum a
var String
"oc",
Datum (OptionalCases -> Term)
Core.optionalCasesJust Datum (OptionalCases -> Term) -> Datum OptionalCases -> Datum Term
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum OptionalCases
forall a. String -> Datum a
var String
"oc"],
Name
_Elimination_unionName -> Datum (Any -> Any) -> Field
forall a. Name -> Datum a -> Field
>>: String -> Datum [Term] -> Datum (Any -> Any)
forall x a b. String -> Datum x -> Datum (a -> b)
lambda String
"cs" (Datum [Term] -> Datum (Any -> Any))
-> Datum [Term] -> Datum (Any -> Any)
forall a b. (a -> b) -> a -> b
$ Datum ([Term] -> [Term] -> [Term])
forall a. Datum ([a] -> [a] -> [a])
Lists.concat2
Datum ([Term] -> [Term] -> [Term])
-> Datum [Term] -> Datum ([Term] -> [Term])
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ ((Datum [Term]
-> Datum (Term -> [Term]) -> Datum (Maybe Term -> [Term])
forall b a. Datum b -> Datum (a -> b) -> Datum (Maybe a -> b)
matchOpt ([Datum Term] -> Datum [Term]
forall a. [Datum a] -> Datum [a]
list []) (String -> Datum [Any] -> Datum (Term -> [Term])
forall x a b. String -> Datum x -> Datum (a -> b)
lambda String
"t" (Datum [Any] -> Datum (Term -> [Term]))
-> Datum [Any] -> Datum (Term -> [Term])
forall a b. (a -> b) -> a -> b
$ [Datum Any] -> Datum [Any]
forall a. [Datum a] -> Datum [a]
list [String -> Datum Any
forall a. String -> Datum a
var String
"t"])) Datum (Maybe Term -> [Term]) -> Datum (Maybe Term) -> Datum [Term]
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ (Datum (CaseStatement -> Maybe Term)
Core.caseStatementDefault Datum (CaseStatement -> Maybe Term)
-> Datum CaseStatement -> Datum (Maybe Term)
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum CaseStatement
forall a. String -> Datum a
var String
"cs"))
Datum ([Term] -> [Term]) -> Datum [Term] -> Datum [Term]
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ (Datum ((Field -> Term) -> [Field] -> [Term])
forall a b. Datum ((a -> b) -> [a] -> [b])
Lists.map Datum ((Field -> Term) -> [Field] -> [Term])
-> Datum (Field -> Term) -> Datum ([Field] -> [Term])
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ Datum (Field -> Term)
Core.fieldTerm Datum ([Field] -> [Term]) -> Datum [Field] -> Datum [Term]
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ (Datum (CaseStatement -> [Field])
Core.caseStatementCases Datum (CaseStatement -> [Field])
-> Datum CaseStatement -> Datum [Field]
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum CaseStatement
forall a. String -> Datum a
var String
"cs"))],
Name
_Function_lambdaName -> Datum (Any -> Any) -> Field
forall a. Name -> Datum a -> Field
>>: String -> Datum [Term] -> Datum (Any -> Any)
forall x a b. String -> Datum x -> Datum (a -> b)
lambda String
"l" (Datum [Term] -> Datum (Any -> Any))
-> Datum [Term] -> Datum (Any -> Any)
forall a b. (a -> b) -> a -> b
$ [Datum Term] -> Datum [Term]
forall a. [Datum a] -> Datum [a]
list [Datum (Lambda -> Term)
Core.lambdaBody Datum (Lambda -> Term) -> Datum Lambda -> Datum Term
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum Lambda
forall a. String -> Datum a
var String
"l"]],
Name
_Term_letName -> Datum (Any -> Any) -> Field
forall a. Name -> Datum a -> Field
>>: String -> Datum [Term] -> Datum (Any -> Any)
forall x a b. String -> Datum x -> Datum (a -> b)
lambda String
"lt" (Datum [Term] -> Datum (Any -> Any))
-> Datum [Term] -> Datum (Any -> Any)
forall a b. (a -> b) -> a -> b
$ Datum (Term -> [Term] -> [Term])
forall a. Datum (a -> [a] -> [a])
Lists.cons
Datum (Term -> [Term] -> [Term])
-> Datum Term -> Datum ([Term] -> [Term])
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ (Datum (Let -> Term)
Core.letEnvironment Datum (Let -> Term) -> Datum Let -> Datum Term
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum Let
forall a. String -> Datum a
var String
"lt")
Datum ([Term] -> [Term]) -> Datum [Term] -> Datum [Term]
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ (Datum ((LetBinding -> Term) -> [LetBinding] -> [Term])
forall a b. Datum ((a -> b) -> [a] -> [b])
Lists.map Datum ((LetBinding -> Term) -> [LetBinding] -> [Term])
-> Datum (LetBinding -> Term) -> Datum ([LetBinding] -> [Term])
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ Datum (LetBinding -> Term)
Core.letBindingTerm Datum ([LetBinding] -> [Term])
-> Datum [LetBinding] -> Datum [Term]
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ (Datum (Let -> [LetBinding])
Core.letBindings Datum (Let -> [LetBinding]) -> Datum Let -> Datum [LetBinding]
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum Let
forall a. String -> Datum a
var String
"lt")),
Name
_Term_listName -> Datum (Any -> Any) -> Field
forall a. Name -> Datum a -> Field
>>: String -> Datum Any -> Datum (Any -> Any)
forall x a b. String -> Datum x -> Datum (a -> b)
lambda String
"l" (Datum Any -> Datum (Any -> Any))
-> Datum Any -> Datum (Any -> Any)
forall a b. (a -> b) -> a -> b
$ String -> Datum Any
forall a. String -> Datum a
var String
"l",
Name
_Term_literalName -> Datum (Any -> [Any]) -> Field
forall a. Name -> Datum a -> Field
>>: Datum [Any] -> Datum (Any -> [Any])
forall a b. Datum a -> Datum (b -> a)
constant (Datum [Any] -> Datum (Any -> [Any]))
-> Datum [Any] -> Datum (Any -> [Any])
forall a b. (a -> b) -> a -> b
$ [Datum Any] -> Datum [Any]
forall a. [Datum a] -> Datum [a]
list [],
Name
_Term_mapName -> Datum (Any -> Any) -> Field
forall a. Name -> Datum a -> Field
>>: String -> Datum [Any] -> Datum (Any -> Any)
forall x a b. String -> Datum x -> Datum (a -> b)
lambda String
"m" (Datum ([[Any]] -> [Any])
forall a. Datum ([[a]] -> [a])
Lists.concat Datum ([[Any]] -> [Any]) -> Datum [[Any]] -> Datum [Any]
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@
(Datum (((Any, Any) -> [Any]) -> [(Any, Any)] -> [[Any]])
forall a b. Datum ((a -> b) -> [a] -> [b])
Lists.map Datum (((Any, Any) -> [Any]) -> [(Any, Any)] -> [[Any]])
-> Datum ((Any, Any) -> [Any]) -> Datum ([(Any, Any)] -> [[Any]])
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ (String -> Datum [Any] -> Datum ((Any, Any) -> [Any])
forall x a b. String -> Datum x -> Datum (a -> b)
lambda String
"p" (Datum [Any] -> Datum ((Any, Any) -> [Any]))
-> Datum [Any] -> Datum ((Any, Any) -> [Any])
forall a b. (a -> b) -> a -> b
$ [Datum Any] -> Datum [Any]
forall a. [Datum a] -> Datum [a]
list [Datum ((Any, Any) -> Any)
forall a b. Datum ((a, b) -> a)
first Datum ((Any, Any) -> Any) -> Datum (Any, Any) -> Datum Any
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum (Any, Any)
forall a. String -> Datum a
var String
"p", Datum ((Any, Any) -> Any)
forall a b. Datum ((a, b) -> b)
second Datum ((Any, Any) -> Any) -> Datum (Any, Any) -> Datum Any
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum (Any, Any)
forall a. String -> Datum a
var String
"p"]) Datum ([(Any, Any)] -> [[Any]])
-> Datum [(Any, Any)] -> Datum [[Any]]
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ (Datum (Map Any Any -> [(Any, Any)])
forall k v. Datum (Map k v -> [(k, v)])
Maps.toList Datum (Map Any Any -> [(Any, Any)])
-> Datum (Map Any Any) -> Datum [(Any, Any)]
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum (Map Any Any)
forall a. String -> Datum a
var String
"m"))),
Name
_Term_optionalName -> Datum (Maybe Any -> [Any]) -> Field
forall a. Name -> Datum a -> Field
>>: Datum [Any] -> Datum (Any -> [Any]) -> Datum (Maybe Any -> [Any])
forall b a. Datum b -> Datum (a -> b) -> Datum (Maybe a -> b)
matchOpt ([Datum Any] -> Datum [Any]
forall a. [Datum a] -> Datum [a]
list []) (String -> Datum [Any] -> Datum (Any -> [Any])
forall x a b. String -> Datum x -> Datum (a -> b)
lambda String
"t" (Datum [Any] -> Datum (Any -> [Any]))
-> Datum [Any] -> Datum (Any -> [Any])
forall a b. (a -> b) -> a -> b
$ [Datum Any] -> Datum [Any]
forall a. [Datum a] -> Datum [a]
list [String -> Datum Any
forall a. String -> Datum a
var String
"t"]),
Name
_Term_productName -> Datum (Any -> Any) -> Field
forall a. Name -> Datum a -> Field
>>: String -> Datum Any -> Datum (Any -> Any)
forall x a b. String -> Datum x -> Datum (a -> b)
lambda String
"tuple" (Datum Any -> Datum (Any -> Any))
-> Datum Any -> Datum (Any -> Any)
forall a b. (a -> b) -> a -> b
$ String -> Datum Any
forall a. String -> Datum a
var String
"tuple",
Name
_Term_recordName -> Datum (Any -> Any) -> Field
forall a. Name -> Datum a -> Field
>>: String -> Datum [Term] -> Datum (Any -> Any)
forall x a b. String -> Datum x -> Datum (a -> b)
lambda String
"rt" (Datum ((Field -> Term) -> [Field] -> [Term])
forall a b. Datum ((a -> b) -> [a] -> [b])
Lists.map Datum ((Field -> Term) -> [Field] -> [Term])
-> Datum (Field -> Term) -> Datum ([Field] -> [Term])
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ Datum (Field -> Term)
Core.fieldTerm Datum ([Field] -> [Term]) -> Datum [Field] -> Datum [Term]
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ (Datum (Record -> [Field])
Core.recordFields Datum (Record -> [Field]) -> Datum Record -> Datum [Field]
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum Record
forall a. String -> Datum a
var String
"rt")),
Name
_Term_setName -> Datum (Set Any -> [Any]) -> Field
forall a. Name -> Datum a -> Field
>>: Datum (Set Any -> [Any])
forall a. Datum (Set a -> [a])
Sets.toList,
Name
_Term_sumName -> Datum (Any -> Any) -> Field
forall a. Name -> Datum a -> Field
>>: String -> Datum [Term] -> Datum (Any -> Any)
forall x a b. String -> Datum x -> Datum (a -> b)
lambda String
"st" (Datum [Term] -> Datum (Any -> Any))
-> Datum [Term] -> Datum (Any -> Any)
forall a b. (a -> b) -> a -> b
$ [Datum Term] -> Datum [Term]
forall a. [Datum a] -> Datum [a]
list [Datum (Sum -> Term)
Core.sumTerm Datum (Sum -> Term) -> Datum Sum -> Datum Term
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum Sum
forall a. String -> Datum a
var String
"st"],
Name
_Term_typedName -> Datum (Any -> Any) -> Field
forall a. Name -> Datum a -> Field
>>: String -> Datum [Term] -> Datum (Any -> Any)
forall x a b. String -> Datum x -> Datum (a -> b)
lambda String
"tt" (Datum [Term] -> Datum (Any -> Any))
-> Datum [Term] -> Datum (Any -> Any)
forall a b. (a -> b) -> a -> b
$ [Datum Term] -> Datum [Term]
forall a. [Datum a] -> Datum [a]
list [Datum (TypedTerm -> Term)
Core.typedTermTerm Datum (TypedTerm -> Term) -> Datum TypedTerm -> Datum Term
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum TypedTerm
forall a. String -> Datum a
var String
"tt"],
Name
_Term_unionName -> Datum (Any -> Any) -> Field
forall a. Name -> Datum a -> Field
>>: String -> Datum [Term] -> Datum (Any -> Any)
forall x a b. String -> Datum x -> Datum (a -> b)
lambda String
"ut" (Datum [Term] -> Datum (Any -> Any))
-> Datum [Term] -> Datum (Any -> Any)
forall a b. (a -> b) -> a -> b
$ [Datum Term] -> Datum [Term]
forall a. [Datum a] -> Datum [a]
list [Datum (Field -> Term)
Core.fieldTerm Datum (Field -> Term) -> Datum Field -> Datum Term
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ (Datum (Injection -> Field)
Core.injectionField Datum (Injection -> Field) -> Datum Injection -> Datum Field
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum Injection
forall a. String -> Datum a
var String
"ut")],
Name
_Term_variableName -> Datum (Any -> [Any]) -> Field
forall a. Name -> Datum a -> Field
>>: Datum [Any] -> Datum (Any -> [Any])
forall a b. Datum a -> Datum (b -> a)
constant (Datum [Any] -> Datum (Any -> [Any]))
-> Datum [Any] -> Datum (Any -> [Any])
forall a b. (a -> b) -> a -> b
$ [Datum Any] -> Datum [Any]
forall a. [Datum a] -> Datum [a]
list [],
Name
_Term_wrapName -> Datum (Any -> Any) -> Field
forall a. Name -> Datum a -> Field
>>: String -> Datum [Term] -> Datum (Any -> Any)
forall x a b. String -> Datum x -> Datum (a -> b)
lambda String
"n" (Datum [Term] -> Datum (Any -> Any))
-> Datum [Term] -> Datum (Any -> Any)
forall a b. (a -> b) -> a -> b
$ [Datum Term] -> Datum [Term]
forall a. [Datum a] -> Datum [a]
list [Datum (WrappedTerm -> Term)
Core.wrappedTermObject Datum (WrappedTerm -> Term) -> Datum WrappedTerm -> Datum Term
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum WrappedTerm
forall a. String -> Datum a
var String
"n"]]
subtypesDef :: Definition (Type -> [Type])
subtypesDef :: Definition (Type -> [Type])
subtypesDef = String -> Datum (Type -> [Type]) -> Definition (Type -> [Type])
forall a. String -> Datum a -> Definition a
tier1Definition String
"subtypes" (Datum (Type -> [Type]) -> Definition (Type -> [Type]))
-> Datum (Type -> [Type]) -> Definition (Type -> [Type])
forall a b. (a -> b) -> a -> b
$
String -> Datum (Type -> [Type]) -> Datum (Type -> [Type])
forall a. String -> Datum a -> Datum a
doc String
"Find the children of a given type expression" (Datum (Type -> [Type]) -> Datum (Type -> [Type]))
-> Datum (Type -> [Type]) -> Datum (Type -> [Type])
forall a b. (a -> b) -> a -> b
$
Type -> Type -> Datum (Type -> [Type]) -> Datum (Type -> [Type])
forall a. Type -> Type -> Datum a -> Datum a
function Type
typeT (Type -> Type
listT Type
typeT) (Datum (Type -> [Type]) -> Datum (Type -> [Type]))
-> Datum (Type -> [Type]) -> Datum (Type -> [Type])
forall a b. (a -> b) -> a -> b
$
Name -> Maybe (Datum [Type]) -> [Field] -> Datum (Type -> [Type])
forall b u. Name -> Maybe (Datum b) -> [Field] -> Datum (u -> b)
match Name
_Type Maybe (Datum [Type])
forall a. Maybe a
Nothing [
Name
_Type_annotatedName -> Datum (Any -> Any) -> Field
forall a. Name -> Datum a -> Field
>>: String -> Datum [Type] -> Datum (Any -> Any)
forall x a b. String -> Datum x -> Datum (a -> b)
lambda String
"at" (Datum [Type] -> Datum (Any -> Any))
-> Datum [Type] -> Datum (Any -> Any)
forall a b. (a -> b) -> a -> b
$ [Datum Type] -> Datum [Type]
forall a. [Datum a] -> Datum [a]
list [Datum (AnnotatedType -> Type)
Core.annotatedTypeSubject Datum (AnnotatedType -> Type) -> Datum AnnotatedType -> Datum Type
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum AnnotatedType
forall a. String -> Datum a
var String
"at"],
Name
_Type_applicationName -> Datum (Any -> Any) -> Field
forall a. Name -> Datum a -> Field
>>: String -> Datum [Type] -> Datum (Any -> Any)
forall x a b. String -> Datum x -> Datum (a -> b)
lambda String
"at" (Datum [Type] -> Datum (Any -> Any))
-> Datum [Type] -> Datum (Any -> Any)
forall a b. (a -> b) -> a -> b
$ [Datum Type] -> Datum [Type]
forall a. [Datum a] -> Datum [a]
list [
Datum (ApplicationType -> Type)
Core.applicationTypeFunction Datum (ApplicationType -> Type)
-> Datum ApplicationType -> Datum Type
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum ApplicationType
forall a. String -> Datum a
var String
"at",
Datum (ApplicationType -> Type)
Core.applicationTypeArgument Datum (ApplicationType -> Type)
-> Datum ApplicationType -> Datum Type
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum ApplicationType
forall a. String -> Datum a
var String
"at"],
Name
_Type_functionName -> Datum (Any -> Any) -> Field
forall a. Name -> Datum a -> Field
>>: String -> Datum [Type] -> Datum (Any -> Any)
forall x a b. String -> Datum x -> Datum (a -> b)
lambda String
"ft" (Datum [Type] -> Datum (Any -> Any))
-> Datum [Type] -> Datum (Any -> Any)
forall a b. (a -> b) -> a -> b
$ [Datum Type] -> Datum [Type]
forall a. [Datum a] -> Datum [a]
list [
Datum (FunctionType -> Type)
Core.functionTypeDomain Datum (FunctionType -> Type) -> Datum FunctionType -> Datum Type
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum FunctionType
forall a. String -> Datum a
var String
"ft",
Datum (FunctionType -> Type)
Core.functionTypeCodomain Datum (FunctionType -> Type) -> Datum FunctionType -> Datum Type
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum FunctionType
forall a. String -> Datum a
var String
"ft"],
Name
_Type_lambdaName -> Datum (Any -> Any) -> Field
forall a. Name -> Datum a -> Field
>>: String -> Datum [Type] -> Datum (Any -> Any)
forall x a b. String -> Datum x -> Datum (a -> b)
lambda String
"lt" (Datum [Type] -> Datum (Any -> Any))
-> Datum [Type] -> Datum (Any -> Any)
forall a b. (a -> b) -> a -> b
$ [Datum Type] -> Datum [Type]
forall a. [Datum a] -> Datum [a]
list [Datum (LambdaType -> Type)
Core.lambdaTypeBody Datum (LambdaType -> Type) -> Datum LambdaType -> Datum Type
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum LambdaType
forall a. String -> Datum a
var String
"lt"],
Name
_Type_listName -> Datum (Any -> Any) -> Field
forall a. Name -> Datum a -> Field
>>: String -> Datum [Any] -> Datum (Any -> Any)
forall x a b. String -> Datum x -> Datum (a -> b)
lambda String
"lt" (Datum [Any] -> Datum (Any -> Any))
-> Datum [Any] -> Datum (Any -> Any)
forall a b. (a -> b) -> a -> b
$ [Datum Any] -> Datum [Any]
forall a. [Datum a] -> Datum [a]
list [String -> Datum Any
forall a. String -> Datum a
var String
"lt"],
Name
_Type_literalName -> Datum (Any -> [Any]) -> Field
forall a. Name -> Datum a -> Field
>>: Datum [Any] -> Datum (Any -> [Any])
forall a b. Datum a -> Datum (b -> a)
constant (Datum [Any] -> Datum (Any -> [Any]))
-> Datum [Any] -> Datum (Any -> [Any])
forall a b. (a -> b) -> a -> b
$ [Datum Any] -> Datum [Any]
forall a. [Datum a] -> Datum [a]
list [],
Name
_Type_mapName -> Datum (Any -> Any) -> Field
forall a. Name -> Datum a -> Field
>>: String -> Datum [Type] -> Datum (Any -> Any)
forall x a b. String -> Datum x -> Datum (a -> b)
lambda String
"mt" (Datum [Type] -> Datum (Any -> Any))
-> Datum [Type] -> Datum (Any -> Any)
forall a b. (a -> b) -> a -> b
$ [Datum Type] -> Datum [Type]
forall a. [Datum a] -> Datum [a]
list [
Datum (MapType -> Type)
Core.mapTypeKeys Datum (MapType -> Type) -> Datum MapType -> Datum Type
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum MapType
forall a. String -> Datum a
var String
"mt",
Datum (MapType -> Type)
Core.mapTypeValues Datum (MapType -> Type) -> Datum MapType -> Datum Type
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum MapType
forall a. String -> Datum a
var String
"mt"],
Name
_Type_optionalName -> Datum (Any -> Any) -> Field
forall a. Name -> Datum a -> Field
>>: String -> Datum [Any] -> Datum (Any -> Any)
forall x a b. String -> Datum x -> Datum (a -> b)
lambda String
"ot" (Datum [Any] -> Datum (Any -> Any))
-> Datum [Any] -> Datum (Any -> Any)
forall a b. (a -> b) -> a -> b
$ [Datum Any] -> Datum [Any]
forall a. [Datum a] -> Datum [a]
list [String -> Datum Any
forall a. String -> Datum a
var String
"ot"],
Name
_Type_productName -> Datum (Any -> Any) -> Field
forall a. Name -> Datum a -> Field
>>: String -> Datum Any -> Datum (Any -> Any)
forall x a b. String -> Datum x -> Datum (a -> b)
lambda String
"pt" (Datum Any -> Datum (Any -> Any))
-> Datum Any -> Datum (Any -> Any)
forall a b. (a -> b) -> a -> b
$ String -> Datum Any
forall a. String -> Datum a
var String
"pt",
Name
_Type_recordName -> Datum (Any -> Any) -> Field
forall a. Name -> Datum a -> Field
>>: String -> Datum [Type] -> Datum (Any -> Any)
forall x a b. String -> Datum x -> Datum (a -> b)
lambda String
"rt" (Datum ((FieldType -> Type) -> [FieldType] -> [Type])
forall a b. Datum ((a -> b) -> [a] -> [b])
Lists.map Datum ((FieldType -> Type) -> [FieldType] -> [Type])
-> Datum (FieldType -> Type) -> Datum ([FieldType] -> [Type])
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ Datum (FieldType -> Type)
Core.fieldTypeType Datum ([FieldType] -> [Type]) -> Datum [FieldType] -> Datum [Type]
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ (Datum (RowType -> [FieldType])
Core.rowTypeFields Datum (RowType -> [FieldType])
-> Datum RowType -> Datum [FieldType]
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum RowType
forall a. String -> Datum a
var String
"rt")),
Name
_Type_setName -> Datum (Any -> Any) -> Field
forall a. Name -> Datum a -> Field
>>: String -> Datum [Any] -> Datum (Any -> Any)
forall x a b. String -> Datum x -> Datum (a -> b)
lambda String
"st" (Datum [Any] -> Datum (Any -> Any))
-> Datum [Any] -> Datum (Any -> Any)
forall a b. (a -> b) -> a -> b
$ [Datum Any] -> Datum [Any]
forall a. [Datum a] -> Datum [a]
list [String -> Datum Any
forall a. String -> Datum a
var String
"st"],
Name
_Type_sumName -> Datum (Any -> Any) -> Field
forall a. Name -> Datum a -> Field
>>: String -> Datum Any -> Datum (Any -> Any)
forall x a b. String -> Datum x -> Datum (a -> b)
lambda String
"st" (Datum Any -> Datum (Any -> Any))
-> Datum Any -> Datum (Any -> Any)
forall a b. (a -> b) -> a -> b
$ String -> Datum Any
forall a. String -> Datum a
var String
"st",
Name
_Type_unionName -> Datum (Any -> Any) -> Field
forall a. Name -> Datum a -> Field
>>: String -> Datum [Type] -> Datum (Any -> Any)
forall x a b. String -> Datum x -> Datum (a -> b)
lambda String
"rt" (Datum ((FieldType -> Type) -> [FieldType] -> [Type])
forall a b. Datum ((a -> b) -> [a] -> [b])
Lists.map Datum ((FieldType -> Type) -> [FieldType] -> [Type])
-> Datum (FieldType -> Type) -> Datum ([FieldType] -> [Type])
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ Datum (FieldType -> Type)
Core.fieldTypeType Datum ([FieldType] -> [Type]) -> Datum [FieldType] -> Datum [Type]
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ (Datum (RowType -> [FieldType])
Core.rowTypeFields Datum (RowType -> [FieldType])
-> Datum RowType -> Datum [FieldType]
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum RowType
forall a. String -> Datum a
var String
"rt")),
Name
_Type_variableName -> Datum (Any -> [Any]) -> Field
forall a. Name -> Datum a -> Field
>>: Datum [Any] -> Datum (Any -> [Any])
forall a b. Datum a -> Datum (b -> a)
constant (Datum [Any] -> Datum (Any -> [Any]))
-> Datum [Any] -> Datum (Any -> [Any])
forall a b. (a -> b) -> a -> b
$ [Datum Any] -> Datum [Any]
forall a. [Datum a] -> Datum [a]
list [],
Name
_Type_wrapName -> Datum (Any -> Any) -> Field
forall a. Name -> Datum a -> Field
>>: String -> Datum [Type] -> Datum (Any -> Any)
forall x a b. String -> Datum x -> Datum (a -> b)
lambda String
"nt" (Datum [Type] -> Datum (Any -> Any))
-> Datum [Type] -> Datum (Any -> Any)
forall a b. (a -> b) -> a -> b
$ [Datum Type] -> Datum [Type]
forall a. [Datum a] -> Datum [a]
list [Datum (WrappedType -> Type)
Core.wrappedTypeObject Datum (WrappedType -> Type) -> Datum WrappedType -> Datum Type
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum WrappedType
forall a. String -> Datum a
var String
"nt"]]
unqualifyNameDef :: Definition (QualifiedName -> Name)
unqualifyNameDef :: Definition (QualifiedName -> Name)
unqualifyNameDef = String
-> Datum (QualifiedName -> Name)
-> Definition (QualifiedName -> Name)
forall a. String -> Datum a -> Definition a
tier1Definition String
"unqualifyName" (Datum (QualifiedName -> Name)
-> Definition (QualifiedName -> Name))
-> Datum (QualifiedName -> Name)
-> Definition (QualifiedName -> Name)
forall a b. (a -> b) -> a -> b
$
String
-> Datum (QualifiedName -> Name) -> Datum (QualifiedName -> Name)
forall a. String -> Datum a -> Datum a
doc String
"Convert a qualified name to a dot-separated name" (Datum (QualifiedName -> Name) -> Datum (QualifiedName -> Name))
-> Datum (QualifiedName -> Name) -> Datum (QualifiedName -> Name)
forall a b. (a -> b) -> a -> b
$
Type
-> Type
-> Datum (QualifiedName -> Name)
-> Datum (QualifiedName -> Name)
forall a. Type -> Type -> Datum a -> Datum a
function Type
qualifiedNameT Type
nameT (Datum (QualifiedName -> Name) -> Datum (QualifiedName -> Name))
-> Datum (QualifiedName -> Name) -> Datum (QualifiedName -> Name)
forall a b. (a -> b) -> a -> b
$
String -> Datum Any -> Datum (QualifiedName -> Name)
forall x a b. String -> Datum x -> Datum (a -> b)
lambda String
"qname" (Datum Any -> Datum (QualifiedName -> Name))
-> Datum Any -> Datum (QualifiedName -> Name)
forall a b. (a -> b) -> a -> b
$ (Name -> Datum String -> Datum Any
forall a b. Name -> Datum a -> Datum b
wrap Name
_Name (Datum String -> Datum Any) -> Datum String -> Datum Any
forall a b. (a -> b) -> a -> b
$ String -> Datum String
forall a. String -> Datum a
var String
"prefix" Datum String -> Datum String -> Datum String
++ (Name -> Name -> Datum (Any -> String)
forall a b. Name -> Name -> Datum (a -> b)
project Name
_QualifiedName Name
_QualifiedName_local Datum (Any -> String) -> Datum Any -> Datum String
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum Any
forall a. String -> Datum a
var String
"qname"))
Datum Any -> [Field] -> Datum Any
forall a. Datum a -> [Field] -> Datum a
`with` [
String
"prefix"String -> Datum String -> Field
forall a. String -> Datum a -> Field
>: Datum String
-> Datum (Any -> String) -> Datum (Maybe Any -> String)
forall b a. Datum b -> Datum (a -> b) -> Datum (Maybe a -> b)
matchOpt (String -> Datum String
string String
"") (String -> Datum String -> Datum (Any -> String)
forall x a b. String -> Datum x -> Datum (a -> b)
lambda String
"n" (Datum String -> Datum (Any -> String))
-> Datum String -> Datum (Any -> String)
forall a b. (a -> b) -> a -> b
$ (Name -> Datum (Any -> String)
forall a b. Name -> Datum (a -> b)
unwrap Name
_Namespace Datum (Any -> String) -> Datum Any -> Datum String
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum Any
forall a. String -> Datum a
var String
"n") Datum String -> Datum String -> Datum String
++ String -> Datum String
string String
".")
Datum (Maybe Any -> String) -> Datum (Maybe Any) -> Datum String
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ (Name -> Name -> Datum (Any -> Maybe Any)
forall a b. Name -> Name -> Datum (a -> b)
project Name
_QualifiedName Name
_QualifiedName_namespace Datum (Any -> Maybe Any) -> Datum Any -> Datum (Maybe Any)
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum Any
forall a. String -> Datum a
var String
"qname")]
emptyTraceDef :: Definition Trace
emptyTraceDef :: Definition Trace
emptyTraceDef = String -> Datum Trace -> Definition Trace
forall a. String -> Datum a -> Definition a
tier1Definition String
"emptyTrace" (Datum Trace -> Definition Trace)
-> Datum Trace -> Definition Trace
forall a b. (a -> b) -> a -> b
$
Name -> [Field] -> Datum Trace
forall a. Name -> [Field] -> Datum a
record Name
_Trace [
Name
_Trace_stackName -> Datum [Any] -> Field
forall a. Name -> Datum a -> Field
>>: [Datum Any] -> Datum [Any]
forall a. [Datum a] -> Datum [a]
list [],
Name
_Trace_messagesName -> Datum [Any] -> Field
forall a. Name -> Datum a -> Field
>>: [Datum Any] -> Datum [Any]
forall a. [Datum a] -> Datum [a]
list [],
Name
_Trace_otherName -> Datum (Map Any Any) -> Field
forall a. Name -> Datum a -> Field
>>: Datum (Map Any Any)
forall k v. Datum (Map k v)
Maps.empty]
flowSucceedsDef :: Definition (Flow s a -> Bool)
flowSucceedsDef :: forall s a. Definition (Flow s a -> Bool)
flowSucceedsDef = String -> Datum (Flow s a -> Bool) -> Definition (Flow s a -> Bool)
forall a. String -> Datum a -> Definition a
tier1Definition String
"flowSucceeds" (Datum (Flow s a -> Bool) -> Definition (Flow s a -> Bool))
-> Datum (Flow s a -> Bool) -> Definition (Flow s a -> Bool)
forall a b. (a -> b) -> a -> b
$
String -> Datum (Flow s a -> Bool) -> Datum (Flow s a -> Bool)
forall a. String -> Datum a -> Datum a
doc String
"Check whether a flow succeeds" (Datum (Flow s a -> Bool) -> Datum (Flow s a -> Bool))
-> Datum (Flow s a -> Bool) -> Datum (Flow s a -> Bool)
forall a b. (a -> b) -> a -> b
$
Type
-> Type -> Datum (Flow s a -> Bool) -> Datum (Flow s a -> Bool)
forall a. Type -> Type -> Datum a -> Datum a
function (String -> Type
Types.var String
"s") (Type -> Type -> Type
Types.function Type
flowSAT Type
Types.boolean) (Datum (Flow s a -> Bool) -> Datum (Flow s a -> Bool))
-> Datum (Flow s a -> Bool) -> Datum (Flow s a -> Bool)
forall a b. (a -> b) -> a -> b
$
String -> Datum (Any -> Any) -> Datum (Flow s a -> Bool)
forall x a b. String -> Datum x -> Datum (a -> b)
lambda String
"cx" (Datum (Any -> Any) -> Datum (Flow s a -> Bool))
-> Datum (Any -> Any) -> Datum (Flow s a -> Bool)
forall a b. (a -> b) -> a -> b
$ String -> Datum Bool -> Datum (Any -> Any)
forall x a b. String -> Datum x -> Datum (a -> b)
lambda String
"f" (Datum Bool -> Datum (Any -> Any))
-> Datum Bool -> Datum (Any -> Any)
forall a b. (a -> b) -> a -> b
$
Datum (Maybe Any -> Bool)
forall a. Datum (Maybe a -> Bool)
Optionals.isJust Datum (Maybe Any -> Bool) -> Datum (Maybe Any) -> Datum Bool
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ (Datum (FlowState Any Any -> Maybe Any)
forall s x. Datum (FlowState s x -> Maybe x)
Flows.flowStateValue Datum (FlowState Any Any -> Maybe Any)
-> Datum (FlowState Any Any) -> Datum (Maybe Any)
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ (Datum (Flow Any Any -> Any -> Trace -> FlowState Any Any)
forall s x. Datum (Flow s x -> s -> Trace -> FlowState s x)
Flows.unFlow Datum (Flow Any Any -> Any -> Trace -> FlowState Any Any)
-> Datum (Flow Any Any)
-> Datum (Any -> Trace -> FlowState Any Any)
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum (Flow Any Any)
forall a. String -> Datum a
var String
"f" Datum (Any -> Trace -> FlowState Any Any)
-> Datum Any -> Datum (Trace -> FlowState Any Any)
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum Any
forall a. String -> Datum a
var String
"cx" Datum (Trace -> FlowState Any Any)
-> Datum Trace -> Datum (FlowState Any Any)
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ Definition Trace -> Datum Trace
forall a. Definition a -> Datum a
ref Definition Trace
emptyTraceDef))
fromFlowDef :: Definition (a -> s -> Flow s a -> a)
fromFlowDef :: forall a s. Definition (a -> s -> Flow s a -> a)
fromFlowDef = String
-> Datum (a -> s -> Flow s a -> a)
-> Definition (a -> s -> Flow s a -> a)
forall a. String -> Datum a -> Definition a
tier1Definition String
"fromFlow" (Datum (a -> s -> Flow s a -> a)
-> Definition (a -> s -> Flow s a -> a))
-> Datum (a -> s -> Flow s a -> a)
-> Definition (a -> s -> Flow s a -> a)
forall a b. (a -> b) -> a -> b
$
String
-> Datum (a -> s -> Flow s a -> a)
-> Datum (a -> s -> Flow s a -> a)
forall a. String -> Datum a -> Datum a
doc String
"Get the value of a flow, or a default value if the flow fails" (Datum (a -> s -> Flow s a -> a)
-> Datum (a -> s -> Flow s a -> a))
-> Datum (a -> s -> Flow s a -> a)
-> Datum (a -> s -> Flow s a -> a)
forall a b. (a -> b) -> a -> b
$
Type
-> Type
-> Datum (a -> s -> Flow s a -> a)
-> Datum (a -> s -> Flow s a -> a)
forall a. Type -> Type -> Datum a -> Datum a
function (String -> Type
Types.var String
"a") (Type -> Type -> Type
Types.function (String -> Type
Types.var String
"s") (Type -> Type -> Type
Types.function Type
flowSAT (String -> Type
Types.var String
"a"))) (Datum (a -> s -> Flow s a -> a)
-> Datum (a -> s -> Flow s a -> a))
-> Datum (a -> s -> Flow s a -> a)
-> Datum (a -> s -> Flow s a -> a)
forall a b. (a -> b) -> a -> b
$
String -> Datum (Any -> Any) -> Datum (a -> s -> Flow s a -> a)
forall x a b. String -> Datum x -> Datum (a -> b)
lambda String
"def" (Datum (Any -> Any) -> Datum (a -> s -> Flow s a -> a))
-> Datum (Any -> Any) -> Datum (a -> s -> Flow s a -> a)
forall a b. (a -> b) -> a -> b
$ String -> Datum (Any -> Any) -> Datum (Any -> Any)
forall x a b. String -> Datum x -> Datum (a -> b)
lambda String
"cx" (Datum (Any -> Any) -> Datum (Any -> Any))
-> Datum (Any -> Any) -> Datum (Any -> Any)
forall a b. (a -> b) -> a -> b
$ String -> Datum Any -> Datum (Any -> Any)
forall x a b. String -> Datum x -> Datum (a -> b)
lambda String
"f" (Datum Any -> Datum (Any -> Any))
-> Datum Any -> Datum (Any -> Any)
forall a b. (a -> b) -> a -> b
$
Datum Any -> Datum (Any -> Any) -> Datum (Maybe Any -> Any)
forall b a. Datum b -> Datum (a -> b) -> Datum (Maybe a -> b)
matchOpt (String -> Datum Any
forall a. String -> Datum a
var String
"def") (String -> Datum Any -> Datum (Any -> Any)
forall x a b. String -> Datum x -> Datum (a -> b)
lambda String
"x" (Datum Any -> Datum (Any -> Any))
-> Datum Any -> Datum (Any -> Any)
forall a b. (a -> b) -> a -> b
$ String -> Datum Any
forall a. String -> Datum a
var String
"x")
Datum (Maybe Any -> Any) -> Datum (Maybe Any) -> Datum Any
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ (Datum (FlowState Any Any -> Maybe Any)
forall s x. Datum (FlowState s x -> Maybe x)
Flows.flowStateValue Datum (FlowState Any Any -> Maybe Any)
-> Datum (FlowState Any Any) -> Datum (Maybe Any)
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ (Datum (Flow Any Any -> Any -> Trace -> FlowState Any Any)
forall s x. Datum (Flow s x -> s -> Trace -> FlowState s x)
Flows.unFlow Datum (Flow Any Any -> Any -> Trace -> FlowState Any Any)
-> Datum (Flow Any Any)
-> Datum (Any -> Trace -> FlowState Any Any)
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum (Flow Any Any)
forall a. String -> Datum a
var String
"f" Datum (Any -> Trace -> FlowState Any Any)
-> Datum Any -> Datum (Trace -> FlowState Any Any)
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum Any
forall a. String -> Datum a
var String
"cx" Datum (Trace -> FlowState Any Any)
-> Datum Trace -> Datum (FlowState Any Any)
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ Definition Trace -> Datum Trace
forall a. Definition a -> Datum a
ref Definition Trace
emptyTraceDef))
mutateTraceDef :: Definition ((Trace -> Either_ String Trace) -> (Trace -> Trace -> Trace) -> Flow s a -> Flow s a)
mutateTraceDef :: forall s a.
Definition
((Trace -> Either_ String Trace)
-> (Trace -> Trace -> Trace) -> Flow s a -> Flow s a)
mutateTraceDef = String
-> Datum
((Trace -> Either_ String Trace)
-> (Trace -> Trace -> Trace) -> Flow s a -> Flow s a)
-> Definition
((Trace -> Either_ String Trace)
-> (Trace -> Trace -> Trace) -> Flow s a -> Flow s a)
forall a. String -> Datum a -> Definition a
tier1Definition String
"mutateTrace" (Datum
((Trace -> Either_ String Trace)
-> (Trace -> Trace -> Trace) -> Flow s a -> Flow s a)
-> Definition
((Trace -> Either_ String Trace)
-> (Trace -> Trace -> Trace) -> Flow s a -> Flow s a))
-> Datum
((Trace -> Either_ String Trace)
-> (Trace -> Trace -> Trace) -> Flow s a -> Flow s a)
-> Definition
((Trace -> Either_ String Trace)
-> (Trace -> Trace -> Trace) -> Flow s a -> Flow s a)
forall a b. (a -> b) -> a -> b
$
[Type]
-> Datum
((Trace -> Either_ String Trace)
-> (Trace -> Trace -> Trace) -> Flow s a -> Flow s a)
-> Datum
((Trace -> Either_ String Trace)
-> (Trace -> Trace -> Trace) -> Flow s a -> Flow s a)
forall a. [Type] -> Datum a -> Datum a
functionN [
Type -> Type -> Type
Types.function Type
traceT (Type -> Type -> Type
eitherT Type
Types.string Type
traceT),
[Type] -> Type
Types.functionN [Type
traceT, Type
traceT, Type
traceT],
Type
flowSAT,
Type
flowSAT] (Datum
((Trace -> Either_ String Trace)
-> (Trace -> Trace -> Trace) -> Flow s a -> Flow s a)
-> Datum
((Trace -> Either_ String Trace)
-> (Trace -> Trace -> Trace) -> Flow s a -> Flow s a))
-> Datum
((Trace -> Either_ String Trace)
-> (Trace -> Trace -> Trace) -> Flow s a -> Flow s a)
-> Datum
((Trace -> Either_ String Trace)
-> (Trace -> Trace -> Trace) -> Flow s a -> Flow s a)
forall a b. (a -> b) -> a -> b
$
String
-> Datum (Any -> Any)
-> Datum
((Trace -> Either_ String Trace)
-> (Trace -> Trace -> Trace) -> Flow s a -> Flow s a)
forall x a b. String -> Datum x -> Datum (a -> b)
lambda String
"mutate" (Datum (Any -> Any)
-> Datum
((Trace -> Either_ String Trace)
-> (Trace -> Trace -> Trace) -> Flow s a -> Flow s a))
-> Datum (Any -> Any)
-> Datum
((Trace -> Either_ String Trace)
-> (Trace -> Trace -> Trace) -> Flow s a -> Flow s a)
forall a b. (a -> b) -> a -> b
$ String -> Datum (Any -> Any) -> Datum (Any -> Any)
forall x a b. String -> Datum x -> Datum (a -> b)
lambda String
"restore" (Datum (Any -> Any) -> Datum (Any -> Any))
-> Datum (Any -> Any) -> Datum (Any -> Any)
forall a b. (a -> b) -> a -> b
$ String -> Datum Any -> Datum (Any -> Any)
forall x a b. String -> Datum x -> Datum (a -> b)
lambda String
"f" (Datum Any -> Datum (Any -> Any))
-> Datum Any -> Datum (Any -> Any)
forall a b. (a -> b) -> a -> b
$ Name -> Datum (Any -> Any) -> Datum Any
forall a b. Name -> Datum a -> Datum b
wrap Name
_Flow (
String -> Datum (Any -> Any) -> Datum (Any -> Any)
forall x a b. String -> Datum x -> Datum (a -> b)
lambda String
"s0" (Datum (Any -> Any) -> Datum (Any -> Any))
-> Datum (Any -> Any) -> Datum (Any -> Any)
forall a b. (a -> b) -> a -> b
$ String -> Datum Any -> Datum (Any -> Any)
forall x a b. String -> Datum x -> Datum (a -> b)
lambda String
"t0" (
((Name -> Maybe (Datum Any) -> [Field] -> Datum (Any -> Any)
forall b u. Name -> Maybe (Datum b) -> [Field] -> Datum (u -> b)
match Name
_Either Maybe (Datum Any)
forall a. Maybe a
Nothing [
Name
_Either_leftName -> Datum Any -> Field
forall a. Name -> Datum a -> Field
>>: String -> Datum Any
forall a. String -> Datum a
var String
"forLeft",
Name
_Either_rightName -> Datum Any -> Field
forall a. Name -> Datum a -> Field
>>: String -> Datum Any
forall a. String -> Datum a
var String
"forRight"])
Datum (Any -> Any) -> Datum Any -> Datum Any
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ (String -> Datum (Any -> Any)
forall a. String -> Datum a
var String
"mutate" Datum (Any -> Any) -> Datum Any -> Datum Any
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum Any
forall a. String -> Datum a
var String
"t0"))
Datum Any -> [Field] -> Datum Any
forall a. Datum a -> [Field] -> Datum a
`with` [
String
"forLeft"String -> Datum (Any -> Any) -> Field
forall a. String -> Datum a -> Field
>:
String -> Datum (FlowState Any Any) -> Datum (Any -> Any)
forall x a b. String -> Datum x -> Datum (a -> b)
lambda String
"msg" (Datum (FlowState Any Any) -> Datum (Any -> Any))
-> Datum (FlowState Any Any) -> Datum (Any -> Any)
forall a b. (a -> b) -> a -> b
$ Datum (Maybe Any)
-> Datum Any -> Datum Trace -> Datum (FlowState Any Any)
forall x s.
Datum (Maybe x) -> Datum s -> Datum Trace -> Datum (FlowState s x)
Flows.flowState Datum (Maybe Any)
forall x. Datum x
nothing (String -> Datum Any
forall a. String -> Datum a
var String
"s0") (Definition (String -> Trace -> Trace)
-> Datum (String -> Trace -> Trace)
forall a. Definition a -> Datum a
ref Definition (String -> Trace -> Trace)
pushErrorDef Datum (String -> Trace -> Trace)
-> Datum String -> Datum (Trace -> Trace)
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum String
forall a. String -> Datum a
var String
"msg" Datum (Trace -> Trace) -> Datum Trace -> Datum Trace
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum Trace
forall a. String -> Datum a
var String
"t0"),
String
"forRight"String -> Datum (Any -> Any) -> Field
forall a. String -> Datum a -> Field
>:
Type -> Type -> Datum (Any -> Any) -> Datum (Any -> Any)
forall a. Type -> Type -> Datum a -> Datum a
function Type
traceT (Type -> Type -> Type
flowStateT (String -> Type
Types.var String
"s") (String -> Type
Types.var String
"s")) (Datum (Any -> Any) -> Datum (Any -> Any))
-> Datum (Any -> Any) -> Datum (Any -> Any)
forall a b. (a -> b) -> a -> b
$
String -> Datum (FlowState Any Any) -> Datum (Any -> Any)
forall x a b. String -> Datum x -> Datum (a -> b)
lambda String
"t1" ((Datum (Maybe Any)
-> Datum Any -> Datum Trace -> Datum (FlowState Any Any)
forall x s.
Datum (Maybe x) -> Datum s -> Datum Trace -> Datum (FlowState s x)
Flows.flowState
(Datum (FlowState Any Any -> Maybe Any)
forall s x. Datum (FlowState s x -> Maybe x)
Flows.flowStateValue Datum (FlowState Any Any -> Maybe Any)
-> Datum (FlowState Any Any) -> Datum (Maybe Any)
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum (FlowState Any Any)
forall a. String -> Datum a
var String
"f2")
(Datum (FlowState Any Any -> Any)
forall s x. Datum (FlowState s x -> s)
Flows.flowStateState Datum (FlowState Any Any -> Any)
-> Datum (FlowState Any Any) -> Datum Any
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum (FlowState Any Any)
forall a. String -> Datum a
var String
"f2")
(String -> Datum (Any -> Trace -> Trace)
forall a. String -> Datum a
var String
"restore" Datum (Any -> Trace -> Trace)
-> Datum Any -> Datum (Trace -> Trace)
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum Any
forall a. String -> Datum a
var String
"t0" Datum (Trace -> Trace) -> Datum Trace -> Datum Trace
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ (Datum (FlowState Any Any -> Trace)
forall s x. Datum (FlowState s x -> Trace)
Flows.flowStateTrace Datum (FlowState Any Any -> Trace)
-> Datum (FlowState Any Any) -> Datum Trace
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum (FlowState Any Any)
forall a. String -> Datum a
var String
"f2")))
Datum (FlowState Any Any) -> [Field] -> Datum (FlowState Any Any)
forall a. Datum a -> [Field] -> Datum a
`with` [
String
"f2"String -> Datum (FlowState Any Any) -> Field
forall a. String -> Datum a -> Field
>: Datum (Flow Any Any -> Any -> Trace -> FlowState Any Any)
forall s x. Datum (Flow s x -> s -> Trace -> FlowState s x)
Flows.unFlow Datum (Flow Any Any -> Any -> Trace -> FlowState Any Any)
-> Datum (Flow Any Any)
-> Datum (Any -> Trace -> FlowState Any Any)
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum (Flow Any Any)
forall a. String -> Datum a
var String
"f" Datum (Any -> Trace -> FlowState Any Any)
-> Datum Any -> Datum (Trace -> FlowState Any Any)
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum Any
forall a. String -> Datum a
var String
"s0" Datum (Trace -> FlowState Any Any)
-> Datum Trace -> Datum (FlowState Any Any)
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum Trace
forall a. String -> Datum a
var String
"t1"
])]))
where
eitherT :: Type -> Type -> Type
eitherT Type
l Type
r = [Type] -> Type
Types.applyN [Name -> Type
TypeVariable Name
_Either, Type
l, Type
r]
pushErrorDef :: Definition (String -> Trace -> Trace)
pushErrorDef :: Definition (String -> Trace -> Trace)
pushErrorDef = String
-> Datum (String -> Trace -> Trace)
-> Definition (String -> Trace -> Trace)
forall a. String -> Datum a -> Definition a
tier1Definition String
"pushError" (Datum (String -> Trace -> Trace)
-> Definition (String -> Trace -> Trace))
-> Datum (String -> Trace -> Trace)
-> Definition (String -> Trace -> Trace)
forall a b. (a -> b) -> a -> b
$
String
-> Datum (String -> Trace -> Trace)
-> Datum (String -> Trace -> Trace)
forall a. String -> Datum a -> Datum a
doc String
"Push an error message" (Datum (String -> Trace -> Trace)
-> Datum (String -> Trace -> Trace))
-> Datum (String -> Trace -> Trace)
-> Datum (String -> Trace -> Trace)
forall a b. (a -> b) -> a -> b
$
[Type]
-> Datum (String -> Trace -> Trace)
-> Datum (String -> Trace -> Trace)
forall a. [Type] -> Datum a -> Datum a
functionN [Type
Types.string, Type
traceT, Type
traceT] (Datum (String -> Trace -> Trace)
-> Datum (String -> Trace -> Trace))
-> Datum (String -> Trace -> Trace)
-> Datum (String -> Trace -> Trace)
forall a b. (a -> b) -> a -> b
$
String -> Datum (Any -> Any) -> Datum (String -> Trace -> Trace)
forall x a b. String -> Datum x -> Datum (a -> b)
lambda String
"msg" (Datum (Any -> Any) -> Datum (String -> Trace -> Trace))
-> Datum (Any -> Any) -> Datum (String -> Trace -> Trace)
forall a b. (a -> b) -> a -> b
$ String -> Datum Trace -> Datum (Any -> Any)
forall x a b. String -> Datum x -> Datum (a -> b)
lambda String
"t" (Datum Trace -> Datum (Any -> Any))
-> Datum Trace -> Datum (Any -> Any)
forall a b. (a -> b) -> a -> b
$ ((Datum [String]
-> Datum [String] -> Datum (Map String Term) -> Datum Trace
Flows.trace
(Datum (Trace -> [String])
Flows.traceStack Datum (Trace -> [String]) -> Datum Trace -> Datum [String]
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum Trace
forall a. String -> Datum a
var String
"t")
(Datum (String -> [String] -> [String])
forall a. Datum (a -> [a] -> [a])
Lists.cons Datum (String -> [String] -> [String])
-> Datum String -> Datum ([String] -> [String])
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum String
forall a. String -> Datum a
var String
"errorMsg" Datum ([String] -> [String]) -> Datum [String] -> Datum [String]
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ (Datum (Trace -> [String])
Flows.traceMessages Datum (Trace -> [String]) -> Datum Trace -> Datum [String]
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum Trace
forall a. String -> Datum a
var String
"t"))
(Datum (Trace -> Map String Term)
Flows.traceOther Datum (Trace -> Map String Term)
-> Datum Trace -> Datum (Map String Term)
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum Trace
forall a. String -> Datum a
var String
"t"))
Datum Trace -> [Field] -> Datum Trace
forall a. Datum a -> [Field] -> Datum a
`with` [
String
"errorMsg"String -> Datum String -> Field
forall a. String -> Datum a -> Field
>: [Datum String] -> Datum String
Strings.concat [Datum String
"Error: ", String -> Datum String
forall a. String -> Datum a
var String
"msg", Datum String
" (", (Datum (String -> [String] -> String)
Strings.intercalate Datum (String -> [String] -> String)
-> Datum String -> Datum ([String] -> String)
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ Datum String
" > " Datum ([String] -> String) -> Datum [String] -> Datum String
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ (Datum ([String] -> [String])
forall a. Datum ([a] -> [a])
Lists.reverse Datum ([String] -> [String]) -> Datum [String] -> Datum [String]
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ (Datum (Trace -> [String])
Flows.traceStack Datum (Trace -> [String]) -> Datum Trace -> Datum [String]
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum Trace
forall a. String -> Datum a
var String
"t"))), Datum String
")"]])
warnDef :: Definition (String -> Flow s a -> Flow s a)
warnDef :: forall s a. Definition (String -> Flow s a -> Flow s a)
warnDef = String
-> Datum (String -> Flow s a -> Flow s a)
-> Definition (String -> Flow s a -> Flow s a)
forall a. String -> Datum a -> Definition a
tier1Definition String
"warn" (Datum (String -> Flow s a -> Flow s a)
-> Definition (String -> Flow s a -> Flow s a))
-> Datum (String -> Flow s a -> Flow s a)
-> Definition (String -> Flow s a -> Flow s a)
forall a b. (a -> b) -> a -> b
$
String
-> Datum (String -> Flow s a -> Flow s a)
-> Datum (String -> Flow s a -> Flow s a)
forall a. String -> Datum a -> Datum a
doc String
"Continue the current flow after adding a warning message" (Datum (String -> Flow s a -> Flow s a)
-> Datum (String -> Flow s a -> Flow s a))
-> Datum (String -> Flow s a -> Flow s a)
-> Datum (String -> Flow s a -> Flow s a)
forall a b. (a -> b) -> a -> b
$
[Type]
-> Datum (String -> Flow s a -> Flow s a)
-> Datum (String -> Flow s a -> Flow s a)
forall a. [Type] -> Datum a -> Datum a
functionN [Type
Types.string, Type
flowSAT, Type
flowSAT] (Datum (String -> Flow s a -> Flow s a)
-> Datum (String -> Flow s a -> Flow s a))
-> Datum (String -> Flow s a -> Flow s a)
-> Datum (String -> Flow s a -> Flow s a)
forall a b. (a -> b) -> a -> b
$
String
-> Datum (Any -> Any) -> Datum (String -> Flow s a -> Flow s a)
forall x a b. String -> Datum x -> Datum (a -> b)
lambda String
"msg" (Datum (Any -> Any) -> Datum (String -> Flow s a -> Flow s a))
-> Datum (Any -> Any) -> Datum (String -> Flow s a -> Flow s a)
forall a b. (a -> b) -> a -> b
$ String -> Datum Any -> Datum (Any -> Any)
forall x a b. String -> Datum x -> Datum (a -> b)
lambda String
"b" (Datum Any -> Datum (Any -> Any))
-> Datum Any -> Datum (Any -> Any)
forall a b. (a -> b) -> a -> b
$ Name -> Datum (Any -> Any) -> Datum Any
forall a b. Name -> Datum a -> Datum b
wrap Name
_Flow (Datum (Any -> Any) -> Datum Any)
-> Datum (Any -> Any) -> Datum Any
forall a b. (a -> b) -> a -> b
$ String -> Datum (Any -> Any) -> Datum (Any -> Any)
forall x a b. String -> Datum x -> Datum (a -> b)
lambda String
"s0" (Datum (Any -> Any) -> Datum (Any -> Any))
-> Datum (Any -> Any) -> Datum (Any -> Any)
forall a b. (a -> b) -> a -> b
$ String -> Datum (FlowState Any Any) -> Datum (Any -> Any)
forall x a b. String -> Datum x -> Datum (a -> b)
lambda String
"t0" (
(Datum (Maybe Any)
-> Datum Any -> Datum Trace -> Datum (FlowState Any Any)
forall x s.
Datum (Maybe x) -> Datum s -> Datum Trace -> Datum (FlowState s x)
Flows.flowState
(Datum (FlowState Any Any -> Maybe Any)
forall s x. Datum (FlowState s x -> Maybe x)
Flows.flowStateValue Datum (FlowState Any Any -> Maybe Any)
-> Datum (FlowState Any Any) -> Datum (Maybe Any)
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum (FlowState Any Any)
forall a. String -> Datum a
var String
"f1")
(Datum (FlowState Any Any -> Any)
forall s x. Datum (FlowState s x -> s)
Flows.flowStateState Datum (FlowState Any Any -> Any)
-> Datum (FlowState Any Any) -> Datum Any
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum (FlowState Any Any)
forall a. String -> Datum a
var String
"f1")
(String -> Datum (Trace -> Trace)
forall a. String -> Datum a
var String
"addMessage" Datum (Trace -> Trace) -> Datum Trace -> Datum Trace
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ (Datum (FlowState Any Any -> Trace)
forall s x. Datum (FlowState s x -> Trace)
Flows.flowStateTrace Datum (FlowState Any Any -> Trace)
-> Datum (FlowState Any Any) -> Datum Trace
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum (FlowState Any Any)
forall a. String -> Datum a
var String
"f1")))
Datum (FlowState Any Any) -> [Field] -> Datum (FlowState Any Any)
forall a. Datum a -> [Field] -> Datum a
`with` [
String
"f1"String -> Datum (FlowState Any Any) -> Field
forall a. String -> Datum a -> Field
>: Datum (Flow Any Any -> Any -> Trace -> FlowState Any Any)
forall s x. Datum (Flow s x -> s -> Trace -> FlowState s x)
Flows.unFlow Datum (Flow Any Any -> Any -> Trace -> FlowState Any Any)
-> Datum (Flow Any Any)
-> Datum (Any -> Trace -> FlowState Any Any)
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum (Flow Any Any)
forall a. String -> Datum a
var String
"b" Datum (Any -> Trace -> FlowState Any Any)
-> Datum Any -> Datum (Trace -> FlowState Any Any)
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum Any
forall a. String -> Datum a
var String
"s0" Datum (Trace -> FlowState Any Any)
-> Datum Trace -> Datum (FlowState Any Any)
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum Trace
forall a. String -> Datum a
var String
"t0",
String
"addMessage"String -> Datum (Any -> Any) -> Field
forall a. String -> Datum a -> Field
>: String -> Datum Trace -> Datum (Any -> Any)
forall x a b. String -> Datum x -> Datum (a -> b)
lambda String
"t" (Datum Trace -> Datum (Any -> Any))
-> Datum Trace -> Datum (Any -> Any)
forall a b. (a -> b) -> a -> b
$ Datum [String]
-> Datum [String] -> Datum (Map String Term) -> Datum Trace
Flows.trace
(Datum (Trace -> [String])
Flows.traceStack Datum (Trace -> [String]) -> Datum Trace -> Datum [String]
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum Trace
forall a. String -> Datum a
var String
"t")
(Datum (String -> [String] -> [String])
forall a. Datum (a -> [a] -> [a])
Lists.cons Datum (String -> [String] -> [String])
-> Datum String -> Datum ([String] -> [String])
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ (Datum String
"Warning: " Datum String -> Datum String -> Datum String
++ String -> Datum String
forall a. String -> Datum a
var String
"msg") Datum ([String] -> [String]) -> Datum [String] -> Datum [String]
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ (Datum (Trace -> [String])
Flows.traceMessages Datum (Trace -> [String]) -> Datum Trace -> Datum [String]
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum Trace
forall a. String -> Datum a
var String
"t"))
(Datum (Trace -> Map String Term)
Flows.traceOther Datum (Trace -> Map String Term)
-> Datum Trace -> Datum (Map String Term)
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum Trace
forall a. String -> Datum a
var String
"t")])
withFlagDef :: Definition (String -> Flow s a -> Flow s a)
withFlagDef :: forall s a. Definition (String -> Flow s a -> Flow s a)
withFlagDef = String
-> Datum (String -> Flow s a -> Flow s a)
-> Definition (String -> Flow s a -> Flow s a)
forall a. String -> Datum a -> Definition a
tier1Definition String
"withFlag" (Datum (String -> Flow s a -> Flow s a)
-> Definition (String -> Flow s a -> Flow s a))
-> Datum (String -> Flow s a -> Flow s a)
-> Definition (String -> Flow s a -> Flow s a)
forall a b. (a -> b) -> a -> b
$
String
-> Datum (String -> Flow s a -> Flow s a)
-> Datum (String -> Flow s a -> Flow s a)
forall a. String -> Datum a -> Datum a
doc String
"Continue the current flow after setting a flag" (Datum (String -> Flow s a -> Flow s a)
-> Datum (String -> Flow s a -> Flow s a))
-> Datum (String -> Flow s a -> Flow s a)
-> Datum (String -> Flow s a -> Flow s a)
forall a b. (a -> b) -> a -> b
$
Type
-> Type
-> Datum (String -> Flow s a -> Flow s a)
-> Datum (String -> Flow s a -> Flow s a)
forall a. Type -> Type -> Datum a -> Datum a
function Type
Types.string (Type -> Type -> Type
Types.function Type
flowSAT Type
flowSAT) (Datum (String -> Flow s a -> Flow s a)
-> Datum (String -> Flow s a -> Flow s a))
-> Datum (String -> Flow s a -> Flow s a)
-> Datum (String -> Flow s a -> Flow s a)
forall a b. (a -> b) -> a -> b
$
String
-> Datum (Flow Any Any -> Flow Any Any)
-> Datum (String -> Flow s a -> Flow s a)
forall x a b. String -> Datum x -> Datum (a -> b)
lambda String
"flag" ((Definition
((Trace -> Either_ String Trace)
-> (Trace -> Trace -> Trace) -> Flow Any Any -> Flow Any Any)
-> Datum
((Trace -> Either_ String Trace)
-> (Trace -> Trace -> Trace) -> Flow Any Any -> Flow Any Any)
forall a. Definition a -> Datum a
ref Definition
((Trace -> Either_ String Trace)
-> (Trace -> Trace -> Trace) -> Flow Any Any -> Flow Any Any)
forall s a.
Definition
((Trace -> Either_ String Trace)
-> (Trace -> Trace -> Trace) -> Flow s a -> Flow s a)
mutateTraceDef Datum
((Trace -> Either_ String Trace)
-> (Trace -> Trace -> Trace) -> Flow Any Any -> Flow Any Any)
-> Datum (Trace -> Either_ String Trace)
-> Datum
((Trace -> Trace -> Trace) -> Flow Any Any -> Flow Any Any)
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum (Trace -> Either_ String Trace)
forall a. String -> Datum a
var String
"mutate" Datum ((Trace -> Trace -> Trace) -> Flow Any Any -> Flow Any Any)
-> Datum (Trace -> Trace -> Trace)
-> Datum (Flow Any Any -> Flow Any Any)
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum (Trace -> Trace -> Trace)
forall a. String -> Datum a
var String
"restore")
Datum (Flow Any Any -> Flow Any Any)
-> [Field] -> Datum (Flow Any Any -> Flow Any Any)
forall a. Datum a -> [Field] -> Datum a
`with` [
String
"mutate"String -> Datum (Any -> Any) -> Field
forall a. String -> Datum a -> Field
>: String -> Datum Any -> Datum (Any -> Any)
forall x a b. String -> Datum x -> Datum (a -> b)
lambda String
"t" (Datum Any -> Datum (Any -> Any))
-> Datum Any -> Datum (Any -> Any)
forall a b. (a -> b) -> a -> b
$ Name -> Name -> Datum Trace -> Datum Any
forall a b. Name -> Name -> Datum a -> Datum b
inject Name
_Either Name
_Either_right (Datum Trace -> Datum Any) -> Datum Trace -> Datum Any
forall a b. (a -> b) -> a -> b
$ (Datum [String]
-> Datum [String] -> Datum (Map String Term) -> Datum Trace
Flows.trace
(Datum (Trace -> [String])
Flows.traceStack Datum (Trace -> [String]) -> Datum Trace -> Datum [String]
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum Trace
forall a. String -> Datum a
var String
"t")
(Datum (Trace -> [String])
Flows.traceMessages Datum (Trace -> [String]) -> Datum Trace -> Datum [String]
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum Trace
forall a. String -> Datum a
var String
"t")
(Datum (String -> Term -> Map String Term -> Map String Term)
forall k v. Datum (k -> v -> Map k v -> Map k v)
Maps.insert Datum (String -> Term -> Map String Term -> Map String Term)
-> Datum String
-> Datum (Term -> Map String Term -> Map String Term)
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum String
forall a. String -> Datum a
var String
"flag" Datum (Term -> Map String Term -> Map String Term)
-> Datum Term -> Datum (Map String Term -> Map String Term)
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ (Name -> Name -> Datum Any -> Datum Term
forall a b. Name -> Name -> Datum a -> Datum b
inject Name
_Term Name
_Term_literal (Datum Any -> Datum Term) -> Datum Any -> Datum Term
forall a b. (a -> b) -> a -> b
$ Name -> Name -> Datum Bool -> Datum Any
forall a b. Name -> Name -> Datum a -> Datum b
inject Name
_Literal Name
_Literal_boolean (Datum Bool -> Datum Any) -> Datum Bool -> Datum Any
forall a b. (a -> b) -> a -> b
$ Bool -> Datum Bool
boolean Bool
True) Datum (Map String Term -> Map String Term)
-> Datum (Map String Term) -> Datum (Map String Term)
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ (Datum (Trace -> Map String Term)
Flows.traceOther Datum (Trace -> Map String Term)
-> Datum Trace -> Datum (Map String Term)
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum Trace
forall a. String -> Datum a
var String
"t"))),
String
"restore"String -> Datum (Any -> Any) -> Field
forall a. String -> Datum a -> Field
>: String -> Datum (Any -> Any) -> Datum (Any -> Any)
forall x a b. String -> Datum x -> Datum (a -> b)
lambda String
"ignored" (Datum (Any -> Any) -> Datum (Any -> Any))
-> Datum (Any -> Any) -> Datum (Any -> Any)
forall a b. (a -> b) -> a -> b
$ String -> Datum Trace -> Datum (Any -> Any)
forall x a b. String -> Datum x -> Datum (a -> b)
lambda String
"t1" (Datum Trace -> Datum (Any -> Any))
-> Datum Trace -> Datum (Any -> Any)
forall a b. (a -> b) -> a -> b
$ Datum [String]
-> Datum [String] -> Datum (Map String Term) -> Datum Trace
Flows.trace
(Datum (Trace -> [String])
Flows.traceStack Datum (Trace -> [String]) -> Datum Trace -> Datum [String]
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum Trace
forall a. String -> Datum a
var String
"t1")
(Datum (Trace -> [String])
Flows.traceMessages Datum (Trace -> [String]) -> Datum Trace -> Datum [String]
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum Trace
forall a. String -> Datum a
var String
"t1")
(Datum (String -> Map String Term -> Map String Term)
forall k v. Datum (k -> Map k v -> Map k v)
Maps.remove Datum (String -> Map String Term -> Map String Term)
-> Datum String -> Datum (Map String Term -> Map String Term)
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum String
forall a. String -> Datum a
var String
"flag" Datum (Map String Term -> Map String Term)
-> Datum (Map String Term) -> Datum (Map String Term)
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ (Datum (Trace -> Map String Term)
Flows.traceOther Datum (Trace -> Map String Term)
-> Datum Trace -> Datum (Map String Term)
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum Trace
forall a. String -> Datum a
var String
"t1"))])
withStateDef :: Definition (s1 -> Flow s1 a -> Flow s2 a)
withStateDef :: forall s1 a s2. Definition (s1 -> Flow s1 a -> Flow s2 a)
withStateDef = String
-> Datum (s1 -> Flow s1 a -> Flow s2 a)
-> Definition (s1 -> Flow s1 a -> Flow s2 a)
forall a. String -> Datum a -> Definition a
tier1Definition String
"withState" (Datum (s1 -> Flow s1 a -> Flow s2 a)
-> Definition (s1 -> Flow s1 a -> Flow s2 a))
-> Datum (s1 -> Flow s1 a -> Flow s2 a)
-> Definition (s1 -> Flow s1 a -> Flow s2 a)
forall a b. (a -> b) -> a -> b
$
String
-> Datum (s1 -> Flow s1 a -> Flow s2 a)
-> Datum (s1 -> Flow s1 a -> Flow s2 a)
forall a. String -> Datum a -> Datum a
doc String
"Continue a flow using a given state" (Datum (s1 -> Flow s1 a -> Flow s2 a)
-> Datum (s1 -> Flow s1 a -> Flow s2 a))
-> Datum (s1 -> Flow s1 a -> Flow s2 a)
-> Datum (s1 -> Flow s1 a -> Flow s2 a)
forall a b. (a -> b) -> a -> b
$
Type
-> Type
-> Datum (s1 -> Flow s1 a -> Flow s2 a)
-> Datum (s1 -> Flow s1 a -> Flow s2 a)
forall a. Type -> Type -> Datum a -> Datum a
function (String -> Type
Types.var String
"s1") (Type -> Type -> Type
Types.function Type
flowS1AT Type
flowS2AT) (Datum (s1 -> Flow s1 a -> Flow s2 a)
-> Datum (s1 -> Flow s1 a -> Flow s2 a))
-> Datum (s1 -> Flow s1 a -> Flow s2 a)
-> Datum (s1 -> Flow s1 a -> Flow s2 a)
forall a b. (a -> b) -> a -> b
$
String
-> Datum (Any -> Any) -> Datum (s1 -> Flow s1 a -> Flow s2 a)
forall x a b. String -> Datum x -> Datum (a -> b)
lambda String
"cx0" (Datum (Any -> Any) -> Datum (s1 -> Flow s1 a -> Flow s2 a))
-> Datum (Any -> Any) -> Datum (s1 -> Flow s1 a -> Flow s2 a)
forall a b. (a -> b) -> a -> b
$ String -> Datum Any -> Datum (Any -> Any)
forall x a b. String -> Datum x -> Datum (a -> b)
lambda String
"f" (Datum Any -> Datum (Any -> Any))
-> Datum Any -> Datum (Any -> Any)
forall a b. (a -> b) -> a -> b
$
Name -> Datum (Any -> Any) -> Datum Any
forall a b. Name -> Datum a -> Datum b
wrap Name
_Flow (Datum (Any -> Any) -> Datum Any)
-> Datum (Any -> Any) -> Datum Any
forall a b. (a -> b) -> a -> b
$ String -> Datum (Any -> Any) -> Datum (Any -> Any)
forall x a b. String -> Datum x -> Datum (a -> b)
lambda String
"cx1" (Datum (Any -> Any) -> Datum (Any -> Any))
-> Datum (Any -> Any) -> Datum (Any -> Any)
forall a b. (a -> b) -> a -> b
$ String -> Datum (FlowState Any Any) -> Datum (Any -> Any)
forall x a b. String -> Datum x -> Datum (a -> b)
lambda String
"t1" (
(Datum (Maybe Any)
-> Datum Any -> Datum Trace -> Datum (FlowState Any Any)
forall x s.
Datum (Maybe x) -> Datum s -> Datum Trace -> Datum (FlowState s x)
Flows.flowState (Datum (FlowState Any Any -> Maybe Any)
forall s x. Datum (FlowState s x -> Maybe x)
Flows.flowStateValue Datum (FlowState Any Any -> Maybe Any)
-> Datum (FlowState Any Any) -> Datum (Maybe Any)
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum (FlowState Any Any)
forall a. String -> Datum a
var String
"f1") (String -> Datum Any
forall a. String -> Datum a
var String
"cx1") (Datum (FlowState Any Any -> Trace)
forall s x. Datum (FlowState s x -> Trace)
Flows.flowStateTrace Datum (FlowState Any Any -> Trace)
-> Datum (FlowState Any Any) -> Datum Trace
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum (FlowState Any Any)
forall a. String -> Datum a
var String
"f1"))
Datum (FlowState Any Any) -> [Field] -> Datum (FlowState Any Any)
forall a. Datum a -> [Field] -> Datum a
`with` [
String
"f1"String -> Datum (FlowState Any Any) -> Field
forall a. String -> Datum a -> Field
>:
Type -> Datum (FlowState Any Any) -> Datum (FlowState Any Any)
forall a. Type -> Datum a -> Datum a
typed (Type -> Type -> Type
Types.apply (Type -> Type -> Type
Types.apply (Name -> Type
TypeVariable Name
_FlowState) (String -> Type
Types.var String
"s1")) (String -> Type
Types.var String
"a")) (Datum (FlowState Any Any) -> Datum (FlowState Any Any))
-> Datum (FlowState Any Any) -> Datum (FlowState Any Any)
forall a b. (a -> b) -> a -> b
$
Datum (Flow Any Any -> Any -> Trace -> FlowState Any Any)
forall s x. Datum (Flow s x -> s -> Trace -> FlowState s x)
Flows.unFlow Datum (Flow Any Any -> Any -> Trace -> FlowState Any Any)
-> Datum (Flow Any Any)
-> Datum (Any -> Trace -> FlowState Any Any)
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum (Flow Any Any)
forall a. String -> Datum a
var String
"f" Datum (Any -> Trace -> FlowState Any Any)
-> Datum Any -> Datum (Trace -> FlowState Any Any)
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum Any
forall a. String -> Datum a
var String
"cx0" Datum (Trace -> FlowState Any Any)
-> Datum Trace -> Datum (FlowState Any Any)
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum Trace
forall a. String -> Datum a
var String
"t1"])
withTraceDef :: Definition (String -> Flow s a -> Flow s a)
withTraceDef :: forall s a. Definition (String -> Flow s a -> Flow s a)
withTraceDef = String
-> Datum (String -> Flow s a -> Flow s a)
-> Definition (String -> Flow s a -> Flow s a)
forall a. String -> Datum a -> Definition a
tier1Definition String
"withTrace" (Datum (String -> Flow s a -> Flow s a)
-> Definition (String -> Flow s a -> Flow s a))
-> Datum (String -> Flow s a -> Flow s a)
-> Definition (String -> Flow s a -> Flow s a)
forall a b. (a -> b) -> a -> b
$
String
-> Datum (String -> Flow s a -> Flow s a)
-> Datum (String -> Flow s a -> Flow s a)
forall a. String -> Datum a -> Datum a
doc String
"Continue the current flow after augmenting the trace" (Datum (String -> Flow s a -> Flow s a)
-> Datum (String -> Flow s a -> Flow s a))
-> Datum (String -> Flow s a -> Flow s a)
-> Datum (String -> Flow s a -> Flow s a)
forall a b. (a -> b) -> a -> b
$
[Type]
-> Datum (String -> Flow s a -> Flow s a)
-> Datum (String -> Flow s a -> Flow s a)
forall a. [Type] -> Datum a -> Datum a
functionN [Type
Types.string, Type
flowSAT, Type
flowSAT] (Datum (String -> Flow s a -> Flow s a)
-> Datum (String -> Flow s a -> Flow s a))
-> Datum (String -> Flow s a -> Flow s a)
-> Datum (String -> Flow s a -> Flow s a)
forall a b. (a -> b) -> a -> b
$
String
-> Datum (Flow Any Any -> Flow Any Any)
-> Datum (String -> Flow s a -> Flow s a)
forall x a b. String -> Datum x -> Datum (a -> b)
lambda String
"msg" ((Definition
((Trace -> Either_ String Trace)
-> (Trace -> Trace -> Trace) -> Flow Any Any -> Flow Any Any)
-> Datum
((Trace -> Either_ String Trace)
-> (Trace -> Trace -> Trace) -> Flow Any Any -> Flow Any Any)
forall a. Definition a -> Datum a
ref Definition
((Trace -> Either_ String Trace)
-> (Trace -> Trace -> Trace) -> Flow Any Any -> Flow Any Any)
forall s a.
Definition
((Trace -> Either_ String Trace)
-> (Trace -> Trace -> Trace) -> Flow s a -> Flow s a)
mutateTraceDef Datum
((Trace -> Either_ String Trace)
-> (Trace -> Trace -> Trace) -> Flow Any Any -> Flow Any Any)
-> Datum (Trace -> Either_ String Trace)
-> Datum
((Trace -> Trace -> Trace) -> Flow Any Any -> Flow Any Any)
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum (Trace -> Either_ String Trace)
forall a. String -> Datum a
var String
"mutate" Datum ((Trace -> Trace -> Trace) -> Flow Any Any -> Flow Any Any)
-> Datum (Trace -> Trace -> Trace)
-> Datum (Flow Any Any -> Flow Any Any)
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum (Trace -> Trace -> Trace)
forall a. String -> Datum a
var String
"restore")
Datum (Flow Any Any -> Flow Any Any)
-> [Field] -> Datum (Flow Any Any -> Flow Any Any)
forall a. Datum a -> [Field] -> Datum a
`with` [
String
"mutate"String -> Datum (Any -> Any) -> Field
forall a. String -> Datum a -> Field
>: String -> Datum Any -> Datum (Any -> Any)
forall x a b. String -> Datum x -> Datum (a -> b)
lambda String
"t" (Datum Any -> Datum (Any -> Any))
-> Datum Any -> Datum (Any -> Any)
forall a b. (a -> b) -> a -> b
$ Datum (Any -> Any -> Bool -> Any)
forall a. Datum (a -> a -> Bool -> a)
Logic.ifElse
Datum (Any -> Any -> Bool -> Any)
-> Datum Any -> Datum (Any -> Bool -> Any)
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ (Name -> Name -> Datum String -> Datum Any
forall a b. Name -> Name -> Datum a -> Datum b
inject Name
_Either Name
_Either_left (Datum String -> Datum Any) -> Datum String -> Datum Any
forall a b. (a -> b) -> a -> b
$ String -> Datum String
string String
"maximum trace depth exceeded. This may indicate an infinite loop")
Datum (Any -> Bool -> Any) -> Datum Any -> Datum (Bool -> Any)
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ (Name -> Name -> Datum Trace -> Datum Any
forall a b. Name -> Name -> Datum a -> Datum b
inject Name
_Either Name
_Either_right (Datum Trace -> Datum Any) -> Datum Trace -> Datum Any
forall a b. (a -> b) -> a -> b
$ Datum [String]
-> Datum [String] -> Datum (Map String Term) -> Datum Trace
Flows.trace
(Datum (String -> [String] -> [String])
forall a. Datum (a -> [a] -> [a])
Lists.cons Datum (String -> [String] -> [String])
-> Datum String -> Datum ([String] -> [String])
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum String
forall a. String -> Datum a
var String
"msg" Datum ([String] -> [String]) -> Datum [String] -> Datum [String]
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ (Datum (Trace -> [String])
Flows.traceStack Datum (Trace -> [String]) -> Datum Trace -> Datum [String]
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum Trace
forall a. String -> Datum a
var String
"t"))
(Datum (Trace -> [String])
Flows.traceMessages Datum (Trace -> [String]) -> Datum Trace -> Datum [String]
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum Trace
forall a. String -> Datum a
var String
"t")
(Datum (Trace -> Map String Term)
Flows.traceOther Datum (Trace -> Map String Term)
-> Datum Trace -> Datum (Map String Term)
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum Trace
forall a. String -> Datum a
var String
"t"))
Datum (Bool -> Any) -> Datum Bool -> Datum Any
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ (Datum (Int -> Int -> Bool)
Equality.gteInt32 Datum (Int -> Int -> Bool) -> Datum Int -> Datum (Int -> Bool)
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ (Datum ([String] -> Int)
forall a. Datum ([a] -> Int)
Lists.length Datum ([String] -> Int) -> Datum [String] -> Datum Int
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ (Datum (Trace -> [String])
Flows.traceStack Datum (Trace -> [String]) -> Datum Trace -> Datum [String]
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum Trace
forall a. String -> Datum a
var String
"t")) Datum (Int -> Bool) -> Datum Int -> Datum Bool
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ Definition Int -> Datum Int
forall a. Definition a -> Datum a
ref Definition Int
maxTraceDepthDef),
String
"restore"String -> Datum (Any -> Any) -> Field
forall a. String -> Datum a -> Field
>: String -> Datum (Any -> Any) -> Datum (Any -> Any)
forall x a b. String -> Datum x -> Datum (a -> b)
lambda String
"t0" (Datum (Any -> Any) -> Datum (Any -> Any))
-> Datum (Any -> Any) -> Datum (Any -> Any)
forall a b. (a -> b) -> a -> b
$ String -> Datum Trace -> Datum (Any -> Any)
forall x a b. String -> Datum x -> Datum (a -> b)
lambda String
"t1" (Datum Trace -> Datum (Any -> Any))
-> Datum Trace -> Datum (Any -> Any)
forall a b. (a -> b) -> a -> b
$ Datum [String]
-> Datum [String] -> Datum (Map String Term) -> Datum Trace
Flows.trace
(Datum (Trace -> [String])
Flows.traceStack Datum (Trace -> [String]) -> Datum Trace -> Datum [String]
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum Trace
forall a. String -> Datum a
var String
"t0")
(Datum (Trace -> [String])
Flows.traceMessages Datum (Trace -> [String]) -> Datum Trace -> Datum [String]
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum Trace
forall a. String -> Datum a
var String
"t1")
(Datum (Trace -> Map String Term)
Flows.traceOther Datum (Trace -> Map String Term)
-> Datum Trace -> Datum (Map String Term)
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum Trace
forall a. String -> Datum a
var String
"t1")])