2012-02-24 24 views
4

考虑下面的模板哈斯克尔功能:自由点式

composeQ :: ExpQ -> ExpQ -> ExpQ 
composeQ = \x y -> [| $(x) . $(y) |] 

是否有可能从等式的右边消除lambda表达式,并使用免费的点式写composeQ

回答

4

有拼接表达式为自由点式的任何报价没有通用的方式,但这种特殊情况下可以这样实现:

composeQ :: ExpQ -> ExpQ -> ExpQ 
composeQ = flip infixApp [|(.)|] 

这里是翻盖infixApp,通常需要在订单left op right参数成op left right,然后向组合运算符提供它。现在我们有一个免费的功能,这相当于原来的composeQ