2014-02-10 81 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

回答