Haskell-src-exts 包的示例

Examples with Haskell-src-exts package

我正在使用 Haskell,我想为这种语言构建一个类型检查器。为此,我需要一种解析它的方法,而且我知道 Haskell-src-exts 非常适合这项工作。但是我对这个包是如何工作的一无所知;我试图在互联网上找到一些示例/教程,但没有任何结果。谁能帮我?有谁知道一些教程,或者可以给我参考一本包含关于这个包的例子的书?我也愿意尝试另一个包,如果它描述得很好并且带有大量示例。

一个方便的入口点是 parseFile。如果使用下面的程序来解析自己:

module HelloParser where

import Language.Haskell.Exts

main = print =<< parseFile "HelloParser.hs"

然后它生成解析输出(剥离 SrcSpanInfo 值并重新格式化):

ParseOk
  (Module (Just (ModuleHead (ModuleName "HelloParser") Nothing Nothing)) []
    [ ImportDecl { importModule = ModuleName "Language.Haskell.Exts"
                 , importQualified = False
                 , importSrc = False
                 , importSafe = False
                 , importPkg = Nothing
                 , importAs = Nothing
                 , importSpecs = Nothing} ]
    [ PatBind
      (PVar (Ident "main"))
      (UnGuardedRhs (InfixApp
                      (Var (UnQual (Ident "print")))
                      (QVarOp (UnQual (Symbol "=<<")))
                      (App
                        (Var (UnQual (Ident "parseFile")))
                        (Lit (String "HelloParser.hs" "HelloParser.hs")))))
      Nothing ])

看起来比较可读。

要完成类型检查任务Haskell,我认为没有任何办法可以避免对Language.Haskell.Exts.Syntax和其他包中数百种解析树数据类型和构造函数的单独考虑模块,所以我不确定更多的 in-depth 教程能给你带来多少。