从模板Haskell接头发出警告

ham*_*mar 6 haskell ghc template-haskell

我知道我可以通过fail从拼接中调用来导致编译时错误,但是是否可以仅生成警告?特别是我希望在编译时可以将此警告转换为错误-Werror.

基本上我正在尝试做的是:

todo :: Q Exp
todo = do
    -- emit warning somehow

    loc <- location
    let message = ... -- generate message based on loc
    [| error $(litE (stringL message)) |]
Run Code Online (Sandbox Code Playgroud)

我们的想法是使用它而不是undefined编码,但要确保它不会通过编译而潜入生产代码-Werror.

myFunc x | isSimpleCase x = 42
         | otherwise = $todo
Run Code Online (Sandbox Code Playgroud)

ham*_*mar 5

原来我之后的功能是Template Haskell功能report.它的类型签名在文档中,但我必须阅读源代码以弄清楚它做了什么.TH文档肯定可以使用一些改进.

无论如何,我的todo占位符现在正在完美运行,如果有人有兴趣,我会尽快在Hackage上做些什么.