我正在开发一个分析 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,扩展的整个桩,是非常容易使用。

哈斯克尔维基GHC 文档 如果您搜索文章,可能有您正在寻找的内容。您可能感兴趣的工具还有 赫林特, ,用于检查语法和有关源代码的其他内容。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top