需要一个使用GHC解析和类型检查Haskell的教程
我正在开发一个分析Haskell代码的项目。 我决定使用GHC来解析源代码并推断类型,而不是编写自己的代码来实现。 现在,我正在抨击Haddock文档,但是它的进展缓慢。 有谁知道一个很好的教程?
编辑:澄清,我不寻找像hlint的东西。 我正在编写我自己的工具来分析Haskell代码的运行时特性,所以就像我在写一个不同的hlint。 我正在寻找的基本上是维基页面GHC作为一个库的扩展。
亚当,这是非常艰难的雪橇。 自2006年推出以来,GHC API的记录有所欠缺。 我推荐的是试图找到一些使用GHC API编写的小应用程序。 要问的地方可能是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。 这适用于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!"
如果解析是最重要的,我推荐haskell-src-exts。 它解析了所有Haskell98,一大堆扩展,并且非常易于使用。
链接地址: http://www.djcxy.com/p/43423.html上一篇: Need a tutorial for using GHC to parse and typecheck Haskell
下一篇: How to compile Haskell into the untyped lambda calculus (or GHC core)?