相关疑难解决方法(0)

模板Haskell:是否有解析String并返回Q Exp的函数(或特殊语法)?

我正在尝试学习一些模板Haskell和Quasi Quotation,我正在寻找一个函数,它接受String并解析它Q Exp,所以类型是:

String -> Q Exp
Run Code Online (Sandbox Code Playgroud)

尝试搜索hoogle,但我看到的结果与提升字符串文字有关Q Exp,而我找到的最接近的Language.Haskell.TH.dyn是我想要的,但仅适用于单个变量.

还有其他选择吗?例如一个特殊的语法?我只是在自己熟悉的过程中[||]$(),所以也许也有一些是为了这个目的呢?

我想象它会起作用的一个例子:

runQ (parse "(1+)") == InfixE (Just (LitE (IntegerL 1))) (VarE GHC.Num.+) Nothing
Run Code Online (Sandbox Code Playgroud)

另外,我知道这一点

runQ [| (1+) |] == InfixE (Just (LitE (IntegerL 1))) (VarE GHC.Num.+) Nothing
Run Code Online (Sandbox Code Playgroud)

但这不适用于变量字符串,因为 - 可以理解 - 里面的字符串被视为文字.

runQ [| "(1+)" |] == LitE (StringL "(1+)")
Run Code Online (Sandbox Code Playgroud)

编辑(2015-07-25):我已经开始使用了haskell-src-meta,到目前为止似乎运行良好.但是它需要相当长的时间cabal install(我的机器上大约10分钟).这是一个耻辱,我的包实际上相当小,我想如果安装可以很快.任何人都知道具有较小依赖性的解决方案?

haskell template-haskell

20
推荐指数
1
解决办法
759
查看次数

标签 统计

haskell ×1

template-haskell ×1