【问题标题】:How do I write a quasi quoter in terms of another quasi quoter我如何根据另一个准报价者写一个准报价者
【发布时间】:2014-10-04 19:34:30
【问题描述】:

如果我正在使用第三方准报价器,例如thirdParty :: QuasiQuoter,并且我想根据这个准报价器编写自己的,我该怎么做?在 ghci 我试过了

runQ [| [thirdParty| |] |]

但是这个输出(在我的例子中):

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

这并没有告诉我“[thirdParty| |]”的抽象语法树是什么,所以我似乎无法使用模板 Haskell 构建这样的模式。

【问题讨论】:

    标签: haskell template-haskell


    【解决方案1】:

    答案很简单,我一问完就想到了。 QuasiQuoter 没有什么神奇之处。这是一个普通的、无聊的代数数据类型!做吧:

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

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

    【讨论】:

      猜你喜欢
      • 2015-08-07
      • 2013-08-12
      • 1970-01-01
      • 2012-05-20
      • 1970-01-01
      • 2016-09-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多