【发布时间】:2012-03-14 14:55:52
【问题描述】:
考虑以下模板 Haskell 函数:
composeQ :: ExpQ -> ExpQ -> ExpQ
composeQ = \x y -> [| $(x) . $(y) |]
是否可以从等式右侧消除 lambda 表达式并使用无点样式编写 composeQ?
【问题讨论】:
标签: haskell template-haskell tacit-programming pointfree
考虑以下模板 Haskell 函数:
composeQ :: ExpQ -> ExpQ -> ExpQ
composeQ = \x y -> [| $(x) . $(y) |]
是否可以从等式右侧消除 lambda 表达式并使用无点样式编写 composeQ?
【问题讨论】:
标签: haskell template-haskell tacit-programming pointfree
没有通用的方法可以将表达式拼接到无点样式的任何引用中,但这种特殊情况可以这样实现:
composeQ :: ExpQ -> ExpQ -> ExpQ
composeQ = flip infixApp [|(.)|]
这里是翻转infixApp,它通常以left op right 的顺序将参数转换为op left right,然后将其提供给组合运算符。现在我们有了一个等效于原始composeQ 的无点函数。
【讨论】: