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