hydra-0.14.0: src/main/haskell/Hydra/Dsl/Meta/Graph.hs
-- | Haskell-specific convenience layer over the generated Hydra.Dsl.Graph module.
-- Re-exports all generated DSL functions and adds non-standard helpers.
module Hydra.Dsl.Meta.Graph (
module Hydra.Dsl.Graph,
module Hydra.Dsl.Meta.Graph,
DslGraph.primitiveName,
DslGraph.primitiveType,
DslGraph.graphPrimitives,
) where
import Hydra.Kernel
import Hydra.Dsl.Meta.Phantoms
import Hydra.Dsl.Graph hiding (primitiveName, primitiveType, graphPrimitives)
import qualified Hydra.Dsl.Graph as DslGraph
import qualified Hydra.Dsl.Meta.Lib.Lists as Lists
import qualified Hydra.Dsl.Meta.Lib.Maps as Maps
import qualified Hydra.Dsl.Meta.Lib.Sets as Sets
import qualified Data.Map as M
import qualified Data.Set as S
-- | Non-standard helpers
comparisonLessThan :: TTerm Comparison
comparisonLessThan = injectUnit _Comparison _Comparison_lessThan
comparisonEqualTo :: TTerm Comparison
comparisonEqualTo = injectUnit _Comparison _Comparison_equalTo
comparisonGreaterThan :: TTerm Comparison
comparisonGreaterThan = injectUnit _Comparison _Comparison_greaterThan
typeClassEquality :: TTerm TypeClass
typeClassEquality = injectUnit _TypeClass _TypeClass_equality
typeClassOrdering :: TTerm TypeClass
typeClassOrdering = injectUnit _TypeClass _TypeClass_ordering
emptyGraph :: TTerm Graph
emptyGraph = graph
Maps.empty -- boundTerms
Maps.empty -- boundTypes
Maps.empty -- classConstraints
Sets.empty -- lambdaVariables
Maps.empty -- metadata
Maps.empty -- primitives
Maps.empty -- schemaTypes
Sets.empty -- typeVariables
graphPrimitiveTypes :: TTerm Graph -> TTerm (M.Map Name TypeScheme)
graphPrimitiveTypes g = Maps.fromList (Lists.map
("_gpt_p" ~> pair (DslGraph.primitiveName $ var "_gpt_p") (DslGraph.primitiveType $ var "_gpt_p"))
(Maps.elems $ DslGraph.graphPrimitives g))