考虑以下模板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,然后将其提供给composition运算符。现在,我们有了一个无点功能,它等效于原始的composeQ

10-06 10:32