整个文件模板Haskell错误
我在写一个TH库,我在做一些模块范围的东西。简言之,我正在收集所有准文本的信息,并将其放入整个文件模板Haskell错误,haskell,ghc,template-haskell,Haskell,Ghc,Template Haskell,我在写一个TH库,我在做一些模块范围的东西。简言之,我正在收集所有准文本的信息,并将其放入Q 然后,一旦Haskell模块进行了类型检查,我就会查找所有这些状态并对其进行一些处理。我通过使用addModFinalizer记录这最后一个动作来管理它 现在,问题是:有时候,这最后的行动可能会失败。如果是,我想报告一个编译错误。使用fail执行此操作时,我会收到如下错误消息: Main.hs:1:1: error: My message of something going wrong with th
Q
然后,一旦Haskell模块进行了类型检查,我就会查找所有这些状态并对其进行一些处理。我通过使用addModFinalizer
记录这最后一个动作来管理它
现在,问题是:有时候,这最后的行动可能会失败。如果是,我想报告一个编译错误。使用fail
执行此操作时,我会收到如下错误消息:
Main.hs:1:1: error: My message of something going wrong with the whole module...
|
1 | {-# LANGUAGE TemplateHaskell, QuasiQuotes #-}
| ^
如您所见,GHC决定将我的错误消息关联到文件的顶部我有没有办法告诉GHC不要将我的错误与一点代码联系起来?我更喜欢这样:
Main.hs: error: My message of something going wrong with the whole module...
顺便说一句,我知道,一般来说,我正在寻找的错误报告对最终用户没有帮助——不用担心,在这一广泛的错误之前,他们会有更多的错误报告日志——只是不是来自GHC。我能想到的唯一一件事是用类似于
runIO(System.Exit.die“fail”)
的东西“伪造”错误消息。根据您的具体用例,这可能是完全不令人满意的,例如,如果出现-fdefer类型错误
,则后续模块的编译应在一个模块失败后继续进行,但这将终止整个过程。至少,GHC剧照似乎在编译后进行清理,即使您像这样随意地杀死它。或者,考虑在错误的底部添加一个免责声明,说明下面的位置完全是假的。