首页 > 解决方案 > Haskell-src-exts 包的示例

问题描述

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

标签: parsinghaskellhaskell-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和其他包模块中的数百个解析树数据类型和构造函数,所以我不确定还有多少- 深度教程可以帮你。


推荐阅读