packages feed

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]