Я уверен, что AST не отправляется напрямую в GHC, так что в любом случае будет печать, а затем и парсинг.
Почему вы так думаете? Это не так, TH AST преобразуется непосредственно в GHC внутри АСТ; он никогда не преобразуется обратно в текст в любой момент этого процесса. (Если это так, то было бы довольно странно.)
Тем не менее, было бы несколько хорошо, если шаблон Haskell разоблачил способ синтаксического анализа источника Haskell для выражений, типов и деклараций, в основном подвергая парсер за различные e
, t
, и d
котировок, которые встроены в Template Haskell. К сожалению, это не так, и я не думаю, что в настоящее время есть какие-то планы по его изменению.
В настоящее время вы должны пройти haskell-src-exts
. Это несколько меньше, чем идеально, поскольку - это различия между парсером и GHC haskell-src-exts
, но это так хорошо, как вы сейчас собираетесь получить. Чтобы уменьшить боль, есть , что мосты haskell-src-exts
и template-haskell
.
Для вашего варианта использования вы можете использовать функцию parseDecs
от Language.Haskell.Meta.Parse
, которая имеет тип String -> Either String [Dec]
, что и есть то, что вы ищете.
Почему, по вашему мнению, АСТ не напрямую переходит в GHC? Это честно удивит меня. – melpomene
Название не похоже на вопрос. Я предположил, что вы искали '-ddump-splices' – jberryman
@jberryman Я согласен. Пожалуйста, предложите лучшую. –