【发布时间】: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 配合得很好。