module DDC.Type.Check.Config
( Config (..)
, configOfProfile)
where
import DDC.Type.DataDef
import DDC.Type.Env (KindEnv, TypeEnv)
import qualified DDC.Type.Env as Env
import qualified DDC.Core.Fragment as F
data Config n
= Config
{
configPrimKinds :: KindEnv n
, configPrimTypes :: TypeEnv n
, configDataDefs :: DataDefs n
, configGlobalCaps :: TypeEnv n
, configNameIsHole :: Maybe (n -> Bool)
, configTrackedEffects :: Bool
, configTrackedClosures :: Bool
, configFunctionalEffects :: Bool
, configFunctionalClosures :: Bool
, configEffectCapabilities :: Bool
, configGeneralLetRec :: Bool
, configImplicitRun :: Bool
, configImplicitBox :: Bool
}
configOfProfile :: F.Profile n -> Config n
configOfProfile profile
= let features = F.profileFeatures profile
in Config
{ configPrimKinds = F.profilePrimKinds profile
, configPrimTypes = F.profilePrimTypes profile
, configDataDefs = F.profilePrimDataDefs profile
, configGlobalCaps = Env.empty
, configNameIsHole = F.profileNameIsHole profile
, configTrackedEffects = F.featuresTrackedEffects features
, configTrackedClosures = F.featuresTrackedClosures features
, configFunctionalEffects = F.featuresFunctionalEffects features
, configFunctionalClosures = F.featuresFunctionalClosures features
, configEffectCapabilities = F.featuresEffectCapabilities features
, configGeneralLetRec = F.featuresGeneralLetRec features
, configImplicitRun = F.featuresImplicitRun features
, configImplicitBox = F.featuresImplicitBox features
}