我正在尝试学习一些模板Haskell和Quasi Quotation,我正在寻找一个函数,它接受String并解析它Q Exp,所以类型是:
String -> Q Exp
尝试搜索hoogle,但我看到的结果与提升字符串文字有关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分钟).这是一个耻辱,我的包实际上相当小,我想如果安装可以很快.任何人都知道具有较小依赖性的解决方案?