考虑以下模板 Haskell 函数:
composeQ :: ExpQ -> ExpQ -> ExpQ
composeQ = \x y -> [| $(x) . $(y) |]
是否可以从等式右侧消除 lambda 表达式并composeQ
使用无点样式编写?
考虑以下模板 Haskell 函数:
composeQ :: ExpQ -> ExpQ -> ExpQ
composeQ = \x y -> [| $(x) . $(y) |]
是否可以从等式右侧消除 lambda 表达式并composeQ
使用无点样式编写?
没有通用的方法可以将表达式拼接到无点样式的任何引用中,但是这种特殊情况可以这样实现:
composeQ :: ExpQ -> ExpQ -> ExpQ
composeQ = flip infixApp [|(.)|]
这是翻转infixApp
,它通常将参数按顺序left op right
输入op left right
,然后使用组合运算符提供。现在我们有了一个等价于原始的无点函数composeQ
。