-- | 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 }