ja.*_*ja. 10
啊! 找到了一个更好的文档入口点:http: //www.haskell.org/ghc/docs/latest/html/libraries/ghc-6.12.1/GHC.html
我用这个例子更新了wikipage:
这里我们演示调用parseModule,typecheckModule,desugarModule,getNamesInScope和getModuleGraph.这适用于haskell-platform,ghc-6.12.1.
错误:libdir是硬编码的.见上面的ghc-paths.
--A.hs
--invoke: ghci -package ghc A.hs
import GHC
import Outputable
--import GHC.Paths ( libdir )
import DynFlags ( defaultDynFlags )
libdir = "/usr/local/lib/ghc-6.12.1"
targetFile = "B.hs"
main = do
res <- example
print $ showSDoc ( ppr res )
example =
defaultErrorHandler defaultDynFlags $ do
runGhc (Just libdir) $ do
dflags <- getSessionDynFlags
setSessionDynFlags dflags
target <- guessTarget targetFile Nothing
setTargets [target]
load LoadAllTargets
modSum <- getModSummary $ mkModuleName "B"
p <- parseModule modSum
t <- typecheckModule p
d <- desugarModule t
l <- loadModule d
n <- getNamesInScope
c <- return $ coreModule d
g <- getModuleGraph
mapM showModule g
return $ (parsedSource d,"/n-----/n", typecheckedSource d)
--B.hs
module B where
main = print "Hello, World!"
Run Code Online (Sandbox Code Playgroud)
亚当,这是非常艰难的雪橇.自从2006年推出以来,GHC API一直没有得到充分证明.我建议尝试找一些使用GHC API编写的小应用程序.正确的问题可能是GHC用户的邮件列表.
一个这样的程序ghctags,与GHC源树一起提供.我写了原始版本,但我不推荐它 - 代码上有太多的脚印,我不能再遵循它了.我能说的最好的是,尽管它很难遵循,但它至少很小并且难以遵循 - 比所有GHC都简单得多.