Skip to content

Instantly share code, notes, and snippets.

@DanielG
Last active September 10, 2015 03:39
Show Gist options
  • Select an option

  • Save DanielG/f1b92066b910a19ba707 to your computer and use it in GitHub Desktop.

Select an option

Save DanielG/f1b92066b910a19ba707 to your computer and use it in GitHub Desktop.
module A where
foo = 123
-- $ ghc -package ghc -package ghc-paths GhcTestcase.hs
-- $ ghc Main.hs
-- $ ./GhcTestcase
{-# LANGUAGE ScopedTypeVariables #-}
module Main where
import GHC
import GHC.Paths (libdir)
import DynFlags
import System.Environment
main :: IO ()
main = do
args <- getArgs
defaultErrorHandler defaultFatalMessager defaultFlushOut $
runGhc (Just libdir) $
doStuff "Main.hs" "Main" args
doStuff :: String -> String -> [String] -> Ghc ()
doStuff targetFile targetModule args = do
dflags0 <- getSessionDynFlags
let dflags1 = dflags0 {
ghcMode = CompManager
, ghcLink = LinkInMemory
, hscTarget = HscInterpreted
, optLevel = 0
}
(dflags2, _, _) <- parseDynamicFlags dflags1 (map noLoc args)
_ <- setSessionDynFlags dflags2
target <- guessTarget targetFile Nothing
target' <- guessTarget "A.hs" Nothing
setTargets [target { targetAllowObjCode = False }] -- target' { targetAllowObjCode = False }
_ <- load LoadAllTargets
setContext [IIModule $ mkModuleName "A"]
return ()
module Main where
import A
main = print foo
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment