4

考虑以下模板 Haskell 函数:

composeQ :: ExpQ -> ExpQ -> ExpQ
composeQ = \x y -> [| $(x) . $(y) |]

是否可以从等式右侧消除 lambda 表达式并composeQ使用无点样式编写?

4

1 回答 1

4

没有通用的方法可以将表达式拼接到无点样式的任何引用中,但是这种特殊情况可以这样实现:

composeQ :: ExpQ -> ExpQ -> ExpQ
composeQ = flip infixApp [|(.)|]

这是翻转infixApp,它通常将参数按顺序left op right输入op left right,然后使用组合运算符提供。现在我们有了一个等价于原始的无点函数composeQ

于 2012-02-24T06:31:45.637 回答