如何用另一个准引号来编写准引号

时间:2014-10-04 11:34:31

标签: haskell template-haskell

如果我正在与第三方准引用者合作,例如thirdParty :: QuasiQuoter,并且我想用这个准引号来编写我自己的,我该怎么做?在ghci我试过

runQ [| [thirdParty| |] |]

但这输出(在我的情况下):

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

哪个没有告诉我" [thirdParty |。]的抽象语法树是什么|]"似乎我无法使用模板Haskell构建这样的模式。

1 个答案:

答案 0 :(得分:4)

答案很简单,我在问完这个问题的那一刻就想到了。关于QuasiQuoter没有什么神奇之处。这是一个简单的老无聊的代数数据类型!只是做:

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

其中f是根据需要转换准引号的函数。如果需要,对quotePatquoteTypequoteDec执行相同的操作。