Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
整个文件模板Haskell错误_Haskell_Ghc_Template Haskell - Fatal编程技术网

整个文件模板Haskell错误

整个文件模板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

我在写一个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剧照似乎在编译后进行清理,即使您像这样随意地杀死它。或者,考虑在错误的底部添加一个免责声明,说明下面的位置完全是假的。