2014-10-04 54 views
4

如果我正在與第三方準報價商合作,例如thirdParty :: QuasiQuoter,並且我想根據這個準報價器編寫自己的報價單,那怎麼辦我這樣做?在ghci中我試圖如何用另一個準報價器編寫準報價器

runQ [| [thirdParty| |] |] 

但這輸出(在我的情況):

LamE [VarP _render_2] (AppE (VarE GHC.Base.return) (ConE GHC.Tuple.())) 

這並沒有告訴我什麼抽象語法樹|看來是如此的「[第三方|]」我不能用模板Haskell構建這樣的模式。

回答

4

答案很簡單,我在問完問題的那一刻就想起了它。 QuasiQuoter沒有什麼神奇的。這是一個簡單的舊無聊的代數數據類型!只要做到:

myQuasiQuoter = QuasiQuoter { quoteExp = f (quoteExp thirdParty) } 

哪裏f是轉換爲所需的準加引號的功能。如果需要,爲quotePatquoteTypequoteDec做同樣的事情。