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)
原来我之后的功能是Template Haskell功能report.它的类型签名在文档中,但我必须阅读源代码以弄清楚它做了什么.TH文档肯定可以使用一些改进.
无论如何,我的todo占位符现在正在完美运行,如果有人有兴趣,我会尽快在Hackage上做些什么.