【发布时间】:2013-12-14 16:33:01
【问题描述】:
我正在寻找一种将有效 Haskell 表达式代码字符串编译成 TH Exp 的方法。
例如,如果存在适当的函数,我希望它的行为方式如下:
> $(theFunctionImLookingFor "\a -> a + 1") 2
3
我已经为[e|..|]的底层QuasiQuoter寻找了quoteExp :: String -> Q Exp的实现,但它似乎很神奇,没有。
【问题讨论】:
-
可以这样做,但只能在编译时已知的字符串上完成。鉴于这种限制,为什么不直接使用准引号?
-
既然我们在谈论 TemplateHaskell,当然是编译时间。我需要这个来实现自定义 QuasiQuoter。它的工作之一就是只存储引用的 Haskell 表达式的结果。
-
明白了,更有意义。不过我还有一个问题....你能不能把内置表达式 quasiquoter 包装起来,只用额外的(不安全的,我猜是不安全的)IO 传递 quoteExp 来记录结果?还是对内置 quoteExp 的工作方式有足够的其他更改来保证重写?
-
如前所述,我找不到这个“内置”quoteExp。看起来很神奇。
-
你要找的函数是
Language.Haskell.Meta.Parse.parseExpinhaskell-src-meta。