4
考虑下面的模板哈斯克尔功能:自由点式
composeQ :: ExpQ -> ExpQ -> ExpQ
composeQ = \x y -> [| $(x) . $(y) |]
是否有可能从等式的右边消除lambda表达式,并使用免费的点式写composeQ
?
考虑下面的模板哈斯克尔功能:自由点式
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
。