X-Git-Url: https://git.stderr.nl/gitweb?a=blobdiff_plain;f=CoreTools.hs;h=4677af498b56680a0c2bf2362a0eda35cf528893;hb=e4e16dc2a7064c8167682ee5d70e4575ef2a9a52;hp=eae4122deff7425570ea5b232d4545ede76d46ac;hpb=758998d6ef18ab5124c65518781c358d76d229ab;p=matthijs%2Fmaster-project%2Fc%CE%BBash.git diff --git a/CoreTools.hs b/CoreTools.hs index eae4122..4677af4 100644 --- a/CoreTools.hs +++ b/CoreTools.hs @@ -38,9 +38,10 @@ import Pretty -- | Evaluate a core Type representing type level int from the tfp -- library to a real int. -eval_tfp_int :: Type.Type -> Int -eval_tfp_int ty = +eval_tfp_int :: HscTypes.HscEnv -> Type.Type -> Int +eval_tfp_int env ty = unsafeRunGhc $ do + GHC.setSession env -- Automatically import modules for any fully qualified identifiers setDynFlag DynFlags.Opt_ImplicitImportQualified @@ -50,15 +51,7 @@ eval_tfp_int ty = let app = SrcLoc.noLoc $ HsExpr.HsApp (from_int_t) (undef) let int_ty = SrcLoc.noLoc $ HsTypes.HsTyVar TysWiredIn.intTyCon_RDR let expr = HsExpr.ExprWithTySig app int_ty - let foo_name = mkRdrName "Types.Data.Num" "foo" - let foo_bind_name = RdrName.mkRdrUnqual $ OccName.mkVarOcc "foo" - let binds = Bag.listToBag [SrcLoc.noLoc $ HsBinds.VarBind foo_bind_name (SrcLoc.noLoc $ HsExpr.HsVar foo_name)] - let letexpr = HsExpr.HsLet - (HsBinds.HsValBinds $ (HsBinds.ValBindsIn binds) []) - (SrcLoc.noLoc expr) - - let modules = map GHC.mkModuleName ["Types.Data.Num"] - core <- toCore modules expr + core <- toCore expr execCore core normalise_tfp_int :: HscTypes.HscEnv -> Type.Type -> Type.Type @@ -222,4 +215,4 @@ getLiterals :: CoreSyn.CoreExpr -> [CoreSyn.CoreExpr] getLiterals app@(CoreSyn.App _ _) = literals where (CoreSyn.Var f, args) = CoreSyn.collectArgs app - literals = filter (is_lit) args \ No newline at end of file + literals = filter (is_lit) args