2012-02-24 37 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