Template Haskell: Existe uma função (ou sintaxe especial) que analisa uma String e retorna Q Exp?
Estou tentando aprender um pouco de Template Haskell e Quasi Quotation, e estou procurando por uma função que faça umaString
e analisa paraQ Exp
, então o tipo é:
String -> Q Exp
Tentei pesquisar no hoogle, mas os resultados que vi foram relacionados ao levantamento de literais de String paraQ Exp
, e o mais próximo que encontrei foiLanguage.Haskell.TH.dyn
o que faz exatamente o que eu quero, mas apenas para uma única variável.
Existem outras opções? Por exemplo. uma sintaxe especial? Estou apenas no processo de me familiarizar com[||]
e$()
, então talvez haja algo para esse fim também?
Um exemplo de como eu imagino que funcionaria:
runQ (parse "(1+)") == InfixE (Just (LitE (IntegerL 1))) (VarE GHC.Num.+) Nothing
Além disso, estou ciente disso
runQ [| (1+) |] == InfixE (Just (LitE (IntegerL 1))) (VarE GHC.Num.+) Nothing
mas isso não funcionará com cadeias de caracteres variáveis porque - compreensivelmente - a cadeia de dentro é considerada literal.
runQ [| "(1+)" |] == LitE (StringL "(1+)")
Editar (25-07-2015): Eu comecei a usarhaskell-src-meta
, e parece funcionar bem até agora. No entanto, leva bastante tempo paracabal install
(cerca de 10 minutos na minha máquina). O que é uma pena, meu pacote é realmente pequeno e eu gostaria que a instalação fosse rápida. Alguém sabe de uma solução que tenha dependências menores?