ddc-build-0.3.1.1: DDC/Build/Language/Base.hs
module DDC.Build.Language.Base
( Language (..)
, Bundle (..))
where
import DDC.Core.Module
import DDC.Core.Fragment
import DDC.Core.Check
import DDC.Core.Simplifier
import DDC.Core.Transform.Namify
import DDC.Core.Transform.Rewrite
import DDC.Base.Pretty
import Control.DeepSeq
import Data.Typeable
import Data.Map (Map)
import DDC.Type.Env (Env)
-- | Existential container for a language fragment, and the dictionaries
-- we need to work with its type parameters.
data Language
= forall s n err
. ( Typeable n
, Ord n
, Show n
, Pretty n
, Pretty (err (AnTEC () n))
, NFData n)
=> Language (Bundle s n err)
-- | Existential container for a language fragment,
-- the simplifier for it,
-- and the dictionaries we need to work with its type parameters.
data Bundle s n err
= Bundle
{ -- | Language fragment definition.
bundleFragment :: Fragment n err
-- | Modules being used for inliner templates.
, bundleModules :: Map ModuleName (Module (AnTEC () n) n)
-- | Initial simplifier state.
, bundleStateInit :: s
-- | Current simplifier to apply to module.
, bundleSimplifier :: Simplifier s (AnTEC () n) n
-- | Make a namifier for level-1 names.
, bundleMakeNamifierT :: Env n -> Namifier s n
-- | Make a namifier for level-0 names.
, bundleMakeNamifierX :: Env n -> Namifier s n
-- | Current rewrite rules to apply to module.
, bundleRewriteRules :: Map String (RewriteRule (AnTEC () n) n) }