需要一个使用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)?