Ответ 1
Вы запрашиваете функцию типа Exp -> Q Info
или Exp -> Q Type
, да? TH не обеспечивает такую функцию. Единственной функцией TH, которая создает Info
, является reify
, и ни один другой тип TH, по-видимому, не раскрывает информацию о типе, которой вы пользуетесь. Похоже, что текущий TH API не предоставляет способ для подтверждения произвольных выражений.
Я не эксперт по внутренним системам GHC, но, судя по compiler/typecheck/TcSplice.hs
, кажется, подтверждает, что reify
работает, просматривая уже скомпилированный объект (и typechecked) и преобразование существующего знания своего типа и т.д. в тип TH Info
. Эта информация не будет существовать для произвольного Exp
. Я предполагаю, что нам придется отбросить это выражение обратно через другой проход компилятора.