需要一个使用 GHC 解析和类型检查 Haskell 的教程
题
我正在开发一个分析 Haskell 代码的项目。我决定使用 GHC 来解析源代码并推断类型,而不是编写自己的代码来执行此操作。现在,我正在努力阅读 Haddock 文档,但进展缓慢。有谁知道一个好的教程吗?
编辑:澄清一下,我并不是在寻找像 hlint 这样的东西。我正在编写自己的工具来分析 Haskell 代码的运行时特征,所以就像我正在编写不同的 hlint 一样。我正在寻找的基本上是维基页面的扩展 GHC 作为一个图书馆.
解决方案
亚当,这是非常艰难雪橇。自2006年推出以来,GHC API已经有所未公开。我会建议是,试图找到已经使用了GHC API编写一些小的应用程序。问正确的地方可能是href="http://www.haskell.org/mailman/listinfo/glasgow-haskell-users" rel="noreferrer"> GHC用户的邮件列表的
一个这样的程序是ghctags
,其附带GHC源树。我写的最原始版本,但我不能建议,有上,我可以不再遵循它的代码,所以许多脚印。我能说的最好的是,虽然这是难以遵循,这是至少的小的,难以跟踪简单得多比所有GHC的。
其他提示
啊!找到一个更好的进入点在文档: http://www.haskell.org /ghc/docs/latest/html/libraries/ghc-6.12.1/GHC.html
我更新了 WIKIPAGE 该示例:
这里,我们表明主叫parseModule,typecheckModule,desugarModule,getNamesInScope,和getModuleGraph。这适用于哈斯克尔平台,GHC-6.12.1。
错误:LIBDIR是硬编码的。见上文GHC路径。
--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!"
如果解析是最重要的事情,我建议哈斯克尔-SRC-EXTS。它分析所有Haskell98,扩展的整个桩,是非常容易使用。