【问题标题】:Examples with Haskell-src-exts packageHaskell-src-exts 包的示例
【发布时间】:2021-02-06 16:54:48
【问题描述】:

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

【问题讨论】:

  • 嗨 Enrico,欢迎来到堆栈溢出。不幸的是,这类问题通常是封闭的。以下是一些讨论适当问题的文章:stackoverflow.com/help/on-topicstackoverflow.com/help/how-to-ask 专门要求教程和书籍的问题被认为是不适当的。也许另一位评论者可以为您提供更好的指导,让您了解去哪里解决这个问题。我做了一个快速的谷歌搜索,也没有找到太多。
  • 感谢您的建议。以后我会更加谨慎地发布问题。
  • 嗯,它仍然是开放的,你得到了一个高声誉会员的回答。所以到目前为止它正在奏效。至少进入该库后,您可能会发现其余文档更容易阅读。在尝试使用 Haskell 模块取得进展时,我遇到了很多问题。

标签: parsing haskell haskell-src-exts


【解决方案1】:

一个方便的入口点是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 和其他包模块中的数百个解析树数据类型和构造函数,所以我不确定更深入的教程能让你走得更远。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多