hydra-0.1.0: src/main/haskell/Hydra/Impl/Haskell/Sources/Phantoms.hs
{-# LANGUAGE OverloadedStrings #-}
module Hydra.Impl.Haskell.Sources.Phantoms where
import Hydra.All
import Hydra.Impl.Haskell.Dsl.Types as Types
import Hydra.Impl.Haskell.Dsl.Standard
import Hydra.Impl.Haskell.Sources.Core
import Hydra.Impl.Haskell.Sources.Compute
hydraPhantomsModule :: Module Meta
hydraPhantomsModule = Module ns elements [hydraComputeModule] $
Just "Phantom types for use in model definitions"
where
ns = Namespace "hydra/phantoms"
core = nsref $ moduleNamespace hydraCoreModule
evaluation = nsref $ moduleNamespace hydraComputeModule
phantoms = nsref ns
def = datatype ns
elements = [
def "Case" $
lambda "a" $ core "FieldName",
def "Datum" $
lambda "a" $ (core "Term") @@ (evaluation "Meta"),
def "Definition" $
lambda "a" $ record [
"name">: core "Name",
"datum">: phantoms "Datum" @@ "a"],
def "Fld" $
lambda "a" $ (core "Field") @@ (evaluation "Meta"),
def "Reference" $
lambda "a" $ unit]