Обратите внимание, что:
Exp
вtemplate-haskell
соответствуетHsExpr
в ГХК АСТType
вtemplate-haskell
соответствуетHsType
в ГХК АСТDec
вtemplate-haskell
соответствуетHsDecl
в ГХК АСТ
Однако в типах template-haskell
отсутствует один набор конструкторов: те, которые относятся к сращиваниям TH и квазикавычкам. Например, почему у Exp
нет конструктора следующего вида?
SpliceE :: Exp -> Exp
Я тоже наткнулся на здесь. Я хотел бы знать, есть ли в этом что-то фундаментальное, или нужно просто проделать дополнительную работу, конкретизируя типы TH? Я подозреваю, что проблема в том, что при этом можно было бы отправить TH в бесконечный цикл - иметь соединение, генерирующее другое соединение, и так далее. Тем не менее, уже есть много способов заставить GHC расходиться... :)
В моем случае использования требуется дополнительный этап TH (чтобы я мог поднять значение до уровня типа - на родительском этапе это значение, но я могу сгенерировать код с этим значением, поднятым до уровня типа для дочернего этапа используя promote
)