考虑以下Template Haskell函数:
composeQ :: ExpQ -> ExpQ -> ExpQ
composeQ = \x y -> [| $(x) . $(y) |]
是否可以从等式右边消除lambda表达式并使用无点样式编写composeQ
?
答案 0 :(得分:4)
没有通用的方法将表达式拼接成无点样式的任何引号,但这种特殊情况可以像这样实现:
composeQ :: ExpQ -> ExpQ -> ExpQ
composeQ = flip infixApp [|(.)|]
以下是翻转infixApp
,它通常按left op right
的顺序将参数带入op left right
,然后将其提供给合成运算符。现在我们有一个与原始composeQ
等效的无点函数。