2014-02-10 88 views
2

我写了下面的功能:模板哈斯克尔 - 静态断言

staticAssert :: Bool -> Q [Dec] 
staticAssert cond = case cond of 
    True -> return [] 
    False -> fail "staticAssert failed" 

基本上这个评估情况在编译的时候,如果是假的会导致编译错误。

但是,我想为staticAssert而不是输出“staticAssert failed”,输出断言失败的表达式。

+1

如果你写'$(fail“err”)',那么错误将包括源文件,行和列号,例如,我得到'test.hs:8:3:err'。如果你想访问源位置以某种自定义的方式打印它,我们'Language.Haskell.TH.location' – user2407038

+0

对不起,你是对的。现在只是打印表达式? – Clinton

+0

你的意思是打印'位置'的结果? '$(location >> = fail。show)'('Loc'没有show实例,所以你必须自己编写或派生它) – user2407038

回答