【问题标题】:Extract list of imported modules from haskell module从 haskell 模块中提取导入模块列表
【发布时间】:2013-03-30 02:28:52
【问题描述】:

我想使用haskell-src-exts 来解析haskell 源模块。但它需要指定所有运算符的固定性。所以我需要一个所有导入模块的列表,以便为范围内的所有操作员提取固定性。

所以,我需要解析模块以获取导入模块的列表;我需要导入模块的列表来解析模块:(

问题:如何在不解析的情况下解析haskell源模块?还有其他我可以使用的解析器吗? hlint如何解决问题?

haskell-src-exts 提供function 来提取顶级编译指示。我需要类似的东西,但对于导入的模块。

【问题讨论】:

  • haskell-src-exts 解析器返回一个Module,其单个构造函数似乎将[ImportDecl] 作为其参数之一;这不正是你想要的吗?
  • @DanielWagner 抱歉,我不清楚。我想避免解析它两次。没有固定点 Module 将包含错误的模块主体 AST。
  • 我不认为 hlint 解决了运营商的问题,它只是查看一个文件。另请参阅community.haskell.org/~ndm/darcs/hlint/hlint.htm(“为什么 HLint 不知道我的自定义 !@%$ 运算符的固定性?”)
  • @Yuras 如果这是您关心的事情,您可能需要为它编写自己的代码。但我敢打赌haskell-src-exts 的维护者会很乐意接受补丁来解析模块的某些常用前缀。
  • 另一种方法是在没有固定点的情况下解析parseFileWithMode defaultParseMode{ fixities =Nothing },然后在查看导入后使用Language.Haskell.Exts.Fixity.applyFixities 使 AST 遵循正确的固定点。谁知道这是否与您可以输入let 的fixity decls 配合得很好。

标签: haskell haskell-src-exts


【解决方案1】:

另一种方法是在没有固定点的情况下解析 parseFileWithMode defaultParseMode{ fixities =Nothing },然后在查看导入后使用 Language.Haskell.Exts.Fixity.applyFixities 使 AST 遵循正确的固定点。谁知道这是否与您可以放入 let 的 fixity decls 搭配得很好

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-08
    • 1970-01-01
    • 2018-03-31
    相关资源
    最近更新 更多