module Transformations where
import Curry.Syntax
import Base.Types
import Transformations.CaseCompletion as CC (completeCase)
import Transformations.CurryToIL as IL (ilTrans, transType)
import Transformations.Desugar as DS (desugar)
import Transformations.Lift as L (lift)
import Transformations.Qual as Q (qual)
import Transformations.Simplify as S (simplify)
import CompilerEnv
import Imports (qualifyEnv)
import qualified IL
qual :: CompEnv Module -> CompEnv Module
qual (env, mdl) = (qualifyEnv env, mdl')
where mdl' = Q.qual (moduleIdent env) (tyConsEnv env) (valueEnv env) mdl
desugar :: CompEnv Module -> CompEnv Module
desugar (env, mdl) = (env { valueEnv = tyEnv' }, mdl')
where (mdl', tyEnv') = DS.desugar (extensions env) (valueEnv env)
(tyConsEnv env) mdl
simplify :: CompEnv Module -> CompEnv Module
simplify (env, mdl) = (env { valueEnv = tyEnv' }, mdl')
where (mdl', tyEnv') = S.simplify (valueEnv env) mdl
lift :: CompEnv Module -> CompEnv Module
lift (env, mdl) = (env { valueEnv = tyEnv' }, mdl')
where (mdl', tyEnv') = L.lift (valueEnv env) mdl
ilTrans :: CompEnv Module -> CompEnv IL.Module
ilTrans (env, mdl) = (env, il)
where il = IL.ilTrans (valueEnv env) mdl
transType :: Type -> IL.Type
transType = IL.transType
completeCase :: CompEnv IL.Module -> CompEnv IL.Module
completeCase (env, mdl) = (env, CC.completeCase (interfaceEnv env) mdl)