module VectBuiltIn (
Builtins(..), sumTyCon, prodTyCon, combinePAVar,
- initBuiltins, initBuiltinTyCons, initBuiltinPAs, initBuiltinPRs,
+ initBuiltins, initBuiltinTyCons, initBuiltinDataCons,
+ initBuiltinPAs, initBuiltinPRs,
initBuiltinBoxedTyCons,
primMethod, primPArray
import IfaceEnv ( lookupOrig )
import Module ( Module )
-import DataCon ( DataCon )
+import DataCon ( DataCon, dataConName )
import TyCon ( TyCon, tyConName, tyConDataCons )
import Var ( Var )
import Id ( mkSysLocal )
import TysPrim
import TysWiredIn ( unitTyCon, tupleTyCon,
intTyCon, intTyConName,
- boolTyCon, boolTyConName )
+ boolTyCon, boolTyConName, trueDataCon, falseDataCon )
import Module
import BasicTypes ( Boxity(..) )
defaultTyCons :: [TyCon]
defaultTyCons = [intTyCon, boolTyCon]
+initBuiltinDataCons :: Builtins -> [(Name, DataCon)]
+initBuiltinDataCons bi = [(dataConName dc, dc)| dc <- defaultDataCons]
+
+defaultDataCons :: [DataCon]
+defaultDataCons = [trueDataCon, falseDataCon]
+
initBuiltinDicts :: [(Name, Module, FastString)] -> DsM [(Name, Var)]
initBuiltinDicts ps
= do
extendTyConsEnv ps genv
= genv { global_tycons = extendNameEnvList (global_tycons genv) ps }
+extendDataConsEnv :: [(Name, DataCon)] -> GlobalEnv -> GlobalEnv
+extendDataConsEnv ps genv
+ = genv { global_datacons = extendNameEnvList (global_datacons genv) ps }
+
extendPAFunsEnv :: [(Name, Var)] -> GlobalEnv -> GlobalEnv
extendPAFunsEnv ps genv
= genv { global_pa_funs = extendNameEnvList (global_pa_funs genv) ps }
go =
do
builtins <- initBuiltins
- let builtin_tycons = initBuiltinTyCons builtins
+ let builtin_tycons = initBuiltinTyCons builtins
+ builtin_datacons = initBuiltinDataCons builtins
builtin_pas <- initBuiltinPAs builtins
builtin_prs <- initBuiltinPRs builtins
builtin_boxed <- initBuiltinBoxedTyCons builtins
instEnvs = (eps_inst_env eps, mg_inst_env guts)
let genv = extendTyConsEnv builtin_tycons
+ . extendDataConsEnv builtin_datacons
. extendPAFunsEnv builtin_pas
. setPRFunsEnv builtin_prs
. setBoxedTyConsEnv builtin_boxed