Add a [ModuleName] parameter to toCore.
authorMatthijs Kooijman <m.kooijman@student.utwente.nl>
Thu, 9 Apr 2009 16:15:43 +0000 (18:15 +0200)
committerMatthijs Kooijman <m.kooijman@student.utwente.nl>
Thu, 9 Apr 2009 16:15:57 +0000 (18:15 +0200)
This allows callers to put any number of modules into scope before
translating to Core. Previously, functions and values could be
automatically imported by using their qualified name, but now also
instances can be used from modules that would not be imported otherwise.

CoreTools.hs
HsTools.hs

index b8ebd85e1ef52935b77f6d85a86b58ceec39036d..52006fb8d624b14991d49526887a29ff84175ab6 100644 (file)
@@ -42,7 +42,7 @@ eval_tfp_int ty =
           (HsBinds.HsValBinds $ (HsBinds.ValBindsIn binds) [])
           (SrcLoc.noLoc expr)
 
-    core <- toCore expr
+    core <- toCore [] expr
     execCore core 
 
 -- | Get the length of a SizedWord type
index a058c84e1e065468d7065349ec1091457407e426..3e8672f6283585008225f248d84a5b06f2e2e4f9 100644 (file)
@@ -66,8 +66,12 @@ import CoreShow
 --    (==) = Prelude.(==) Int $dInt 
 --  in 
 --    \x = (==) x 1
-toCore :: HsSyn.HsExpr RdrName.RdrName -> GHC.Ghc CoreSyn.CoreExpr
-toCore expr = do
+toCore :: 
+  [Module.ModuleName] -- ^ The modules that need to be imported before translating
+                      --   this expression.
+  -> HsSyn.HsExpr RdrName.RdrName -- ^ The expression to translate to Core.
+  -> GHC.Ghc CoreSyn.CoreExpr -- ^ The resulting core expression.
+toCore modules expr = do
   env <- GHC.getSession
   let icontext = HscTypes.hsc_IC env
   
@@ -75,6 +79,7 @@ toCore expr = do
     -- Translage the TcRn (typecheck-rename) monad into an IO monad
     TcRnMonad.initTcPrintErrors env PrelNames.iNTERACTIVE $ do
       (tc_expr, insts) <- TcRnMonad.getLIE $ do
+        mapM importModule modules
         -- Rename the expression, resulting in a HsExpr Name
         (rn_expr, freevars) <- RnExpr.rnExpr expr
         -- Typecheck the expression, resulting in a HsExpr Id and a list of
@@ -161,7 +166,7 @@ eval_type_level_int ty =
     let undef = hsTypedUndef $ coreToHsType ty
     let app = HsExpr.HsApp (to_int) (undef)
 
-    core <- toCore app
+    core <- toCore [] app
     execCore core 
 
 -- These functions build (parts of) a LHSExpr RdrName.