
That's doing what I want, but I'm not sure why you passed
[(mkModule (stringToPackageId "base") (mkModuleName "Prelude"), Nothing) ]
to setContext. I found that
[mkModule (stringToPackageId "base") (mkModuleName "Prelude")]
matches the type expected by setContext. Perhaps we are using
different api versions? I'm using 6.12.3
2011/2/28 Daniel Schüssler
Hi,
On 2011-February-27 Sunday 16:20:06 Edward Amsden wrote:
Secondly,
I'd like to get to a GHC session that just has, say, Prelude in scope so I can use dynCompileExpr with "show" etc, but I cannot figure out how to bring it into scope. The closest I got was to get GHC complaining that it was a package module.
I don't know if setContext is the proper/best way to do it, but it seems to work:
import GHC import GHC.Paths ( libdir ) import DynFlags ( defaultDynFlags ) import Module(stringToPackageId, mkModuleName) import Data.Dynamic(fromDynamic) import System.Environment
evalString s = defaultErrorHandler defaultDynFlags $ do runGhc (Just libdir) $ do dflags <- getSessionDynFlags setSessionDynFlags dflags setContext [] [ (mkModule (stringToPackageId "base") (mkModuleName "Prelude") ,Nothing) ]
dyn <- dynCompileExpr s return $ fromDynamic dyn
main = do (s:_) <- getArgs e <- evalString s putStrLn $ maybe "oops" id e
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
-- Edward Amsden Undergraduate Computer Science Rochester Institute of Technology www.edwardamsden.com