Шаблон Haskell: есть ли функция (или специальный синтаксис), которая анализирует строку и возвращает Q Exp?

Я пытаюсь немного изучить шаблон Haskell и Quasi Quotation, и я ищу функцию, которая принимаетString и анализирует этоQ Exp, так что тип:

String -> Q Exp

Попытка поиска в Google, но результаты, которые я видел, были связаны с подъемом строковых литералов вQ Expи самый близкий былLanguage.Haskell.TH.dyn который делает то, что я хочу, но только для одной переменной.

Есть ли другие варианты? Например. специальный синтаксис? Я просто в процессе ознакомления с[||] а также$()так что, может быть, есть что-то для этого тоже?

Пример того, как я представляю, как это будет работать:

runQ (parse "(1+)") == InfixE (Just (LitE (IntegerL 1))) (VarE GHC.Num.+) Nothing

Кроме того, я знаю об этом

runQ [| (1+) |] == InfixE (Just (LitE (IntegerL 1))) (VarE GHC.Num.+) Nothing

но это не будет работать с переменными строками, потому что - понятно - строка внутри воспринимается как литерал.

runQ [| "(1+)" |] == LitE (StringL "(1+)")

Изменить (2015-07-25): Я начал использоватьhaskell-src-metaи, похоже, до сих пор хорошо работает. Однако это займет довольно много времени, чтобыcabal install (около 10 минут на моей машине). Что жаль, мой пакет на самом деле довольно маленький, и я хотел бы, чтобы установка была быстрой. Кто-нибудь знает решение, которое имеет меньшие зависимости?

Ответы на вопрос(1)

Ваш ответ на вопрос