考虑以下Template 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
。