ddc-build-0.4.2.1: DDC/Build/Language/Tetra.hs
-- | The `Tetra` fragment has four base kinds:
-- `Data`, `Region`, `Effect`, `Witness`,
-- and uses the `S` computation type to represent effects.
module DDC.Build.Language.Tetra
( language
, bundle
, fragment)
where
import DDC.Build.Language.Base
import DDC.Core.Simplifier
import DDC.Core.Transform.Namify
import DDC.Core.Fragment hiding (Error(..))
import qualified DDC.Core.Tetra as E
import qualified Data.Map as Map
-- | Language definition for Disciple Core Tetra.
language :: Language
language = Language bundle
-- | Language bundle for Disciple Core Tetra.
bundle :: Bundle Int E.Name E.Error
bundle
= Bundle
{ bundleFragment = fragment
, bundleModules = Map.empty
, bundleStateInit = 0 :: Int
, bundleSimplifier = Trans Id
, bundleMakeNamifierT = makeNamifier E.freshT
, bundleMakeNamifierX = makeNamifier E.freshX
, bundleRewriteRules = Map.empty }
-- | Fragement definition for Disciple Core Tetra.
fragment :: Fragment E.Name E.Error
fragment
= Fragment
{ fragmentProfile = E.profile
, fragmentExtension = "dct"
, fragmentReadName = E.readName
, fragmentLexModule = E.lexModuleString
, fragmentLexExp = E.lexExpString
, fragmentCheckModule = E.checkModule
, fragmentCheckExp = const Nothing }