Шаблон 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 минут на моей машине). Что жаль, мой пакет на самом деле довольно маленький, и я хотел бы, чтобы установка была быстрой. Кто-нибудь знает решение, которое имеет меньшие зависимости?