module Hydra.Dsl.Graph where

import Hydra.Kernel
import Hydra.Dsl.Base as Base

import qualified Data.Map as M


elementName :: TTerm (Element -> Name)
elementName :: TTerm (Element -> Name)
elementName = Name -> Name -> TTerm (Element -> Name)
forall a b. Name -> Name -> TTerm (a -> b)
project Name
_Element Name
_Element_name

graph :: TTerm (M.Map Name Element)
    -> TTerm (M.Map Name (Maybe Term))
    -> TTerm (M.Map Name TypeScheme)
    -> TTerm Term
    -> TTerm (M.Map Name Primitive)
    -> TTerm (Maybe Graph)
    -> TTerm Graph
graph :: TTerm (Map Name Element)
-> TTerm (Map Name (Maybe Term))
-> TTerm (Map Name TypeScheme)
-> TTerm Term
-> TTerm (Map Name Primitive)
-> TTerm (Maybe Graph)
-> TTerm Graph
graph TTerm (Map Name Element)
elements TTerm (Map Name (Maybe Term))
environment TTerm (Map Name TypeScheme)
types TTerm Term
body TTerm (Map Name Primitive)
primitives TTerm (Maybe Graph)
schema = Name -> [Field] -> TTerm Graph
forall a. Name -> [Field] -> TTerm a
record Name
_Graph [
    Name
_Graph_elementsName -> TTerm (Map Name Element) -> Field
forall a. Name -> TTerm a -> Field
>>: TTerm (Map Name Element)
elements,
    Name
_Graph_environmentName -> TTerm (Map Name (Maybe Term)) -> Field
forall a. Name -> TTerm a -> Field
>>: TTerm (Map Name (Maybe Term))
environment,
    Name
_Graph_typesName -> TTerm (Map Name TypeScheme) -> Field
forall a. Name -> TTerm a -> Field
>>: TTerm (Map Name TypeScheme)
types,
    Name
_Graph_bodyName -> TTerm Term -> Field
forall a. Name -> TTerm a -> Field
>>: TTerm Term
body,
    Name
_Graph_primitivesName -> TTerm (Map Name Primitive) -> Field
forall a. Name -> TTerm a -> Field
>>: TTerm (Map Name Primitive)
primitives,
    Name
_Graph_schemaName -> TTerm (Maybe Graph) -> Field
forall a. Name -> TTerm a -> Field
>>: TTerm (Maybe Graph)
schema]

graphElements :: TTerm (Graph -> M.Map Name Element)
graphElements :: TTerm (Graph -> Map Name Element)
graphElements = Name -> Name -> TTerm (Graph -> Map Name Element)
forall a b. Name -> Name -> TTerm (a -> b)
project Name
_Graph Name
_Graph_elements

graphEnvironment :: TTerm (Graph -> M.Map Name (Maybe Term))
graphEnvironment :: TTerm (Graph -> Map Name (Maybe Term))
graphEnvironment = Name -> Name -> TTerm (Graph -> Map Name (Maybe Term))
forall a b. Name -> Name -> TTerm (a -> b)
project Name
_Graph Name
_Graph_environment

graphTypes :: TTerm (Graph -> M.Map Name TypeScheme)
graphTypes :: TTerm (Graph -> Map Name TypeScheme)
graphTypes = Name -> Name -> TTerm (Graph -> Map Name TypeScheme)
forall a b. Name -> Name -> TTerm (a -> b)
project Name
_Graph Name
_Graph_types

graphBody :: TTerm (Graph -> Term)
graphBody :: TTerm (Graph -> Term)
graphBody = Name -> Name -> TTerm (Graph -> Term)
forall a b. Name -> Name -> TTerm (a -> b)
project Name
_Graph Name
_Graph_body

graphPrimitives :: TTerm (Graph -> M.Map Name Primitive)
graphPrimitives :: TTerm (Graph -> Map Name Primitive)
graphPrimitives = Name -> Name -> TTerm (Graph -> Map Name Primitive)
forall a b. Name -> Name -> TTerm (a -> b)
project Name
_Graph Name
_Graph_primitives

graphSchema :: TTerm (Graph -> Maybe Graph)
graphSchema :: TTerm (Graph -> Maybe Graph)
graphSchema = Name -> Name -> TTerm (Graph -> Maybe Graph)
forall a b. Name -> Name -> TTerm (a -> b)
project Name
_Graph Name
_Graph_schema

primitiveName :: TTerm (Primitive -> Name)
primitiveName :: TTerm (Primitive -> Name)
primitiveName = Name -> Name -> TTerm (Primitive -> Name)
forall a b. Name -> Name -> TTerm (a -> b)
project Name
_Primitive Name
_Primitive_name

primitiveType :: TTerm (Primitive -> TypeScheme)
primitiveType :: TTerm (Primitive -> TypeScheme)
primitiveType = Name -> Name -> TTerm (Primitive -> TypeScheme)
forall a b. Name -> Name -> TTerm (a -> b)
project Name
_Primitive Name
_Primitive_type

primitiveImplementation :: TTerm (Primitive -> ([Term] -> Flow Graph Term))
primitiveImplementation :: TTerm (Primitive -> [Term] -> Flow Graph Term)
primitiveImplementation = Name -> Name -> TTerm (Primitive -> [Term] -> Flow Graph Term)
forall a b. Name -> Name -> TTerm (a -> b)
project Name
_Primitive Name
_Primitive_type