Компиляция строки в Exp с помощью TemplateHaskell

Я ищу способ скомпилировать строку действительного кода выражения Haskell в файл TH Exp.

Например, если бы существовала соответствующая функция, я бы ожидал, что она будет вести себя следующим образом:

> $(theFunctionImLookingFor "\a -> a + 1") 2
3

Я уже искал реализацию quoteExp :: String -> Q Exp для базового QuasiQuoter из [e|..|], но похоже на магию и ее нет.


person Nikita Volkov    schedule 13.12.2013    source источник
comment
Это можно сделать, но только для строк, известных во время компиляции. Учитывая это ограничение, почему бы просто не использовать квазицитаты?   -  person jamshidh    schedule 13.12.2013
comment
Поскольку мы говорим о TemplateHaskell, конечно, это время компиляции. Мне это нужно для реализации пользовательского QuasiQuoter. Одна из его задач — просто сохранить результат цитируемого выражения Haskell.   -  person Nikita Volkov    schedule 13.12.2013
comment
Понял, логичнее. У меня есть еще один вопрос... Не могли бы вы просто обернуть встроенное выражение квазиквотером, просто передать quoteExp с дополнительным (я думаю, небезопасным) вводом-выводом, чтобы записать результат? Или есть достаточно других изменений в том, как работает встроенный quoteExp, чтобы гарантировать переписывание?   -  person jamshidh    schedule 13.12.2013
comment
Как уже упоминалось, я не смог найти это встроенное в quoteExp. Кажется, это магия.   -  person Nikita Volkov    schedule 13.12.2013
comment
Функция, которую вы ищете, Language.Haskell.Meta.Parse.parseExp в haskell-src-meta.   -  person user2407038    schedule 13.12.2013
comment
@user2407038 user2407038 Вот оно! Спасибо! Если вы опубликуете это как ответ, я приму это.   -  person Nikita Volkov    schedule 13.12.2013


Ответы (1)


Функция, которую вы ищете, Language.Haskell.Meta.Parse.parseExp в haskell-src-meta

person user2407038    schedule 14.12.2013