2014-10-04 4 views
4

Если я работаю с квазициклером третьей стороны, например thirdParty :: QuasiQuoter, и я хочу написать свои собственные в терминах этого квазициклера, как это сделать Я делаю это? В GHCI я попыталсяКак написать квазициклер в терминах другого квазицикла

runQ [| [thirdParty| |] |] 

Но это выходы (в моем случае):

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

Что не сказать мне, что абстрактный синтаксис дерево «[ThirdParty | |]» так, что кажется Я не могу построить такой паттен с шаблоном Haskell.

ответ

4

Ответ прост в обращении, и я подумал об этом в тот момент, когда я закончил задавать вопрос. Нет ничего волшебного о QuasiQuoter. Это простой старый скучный алгебраический тип данных! Вобще:

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

Где f это функция, которая превращает квази-Quoter по мере необходимости. Сделайте то же самое для quotePat, quoteType и quoteDec при необходимости.

 Смежные вопросы

  • Нет связанных вопросов^_^