
Doaitse Swierstra wrote:
In Haskell we write `f` in order to infixify the identifier f. In ABC the stuff between backquotes is not limited to an identifier, but any expression may occur there. This would allow one to write e.g.
xs `zipWith (+)` ys
Chung-chieh Shan and Dylan Thurston showed the Haskell98 solution for exactly the same example, in their article `Infix expressions', back in 2002: http://www.haskell.org/pipermail/haskell-cafe/2002-July/003215.html For ease of reference, here's their elegant solution:
infixr 0 -:, :- data Infix f y = f :- y x -:f:- y = x `f` y
main = print $ [1,2,3] -: zipWith (+) :- [4,5,6]
For completeness, here's the `dual':
infixr 5 -! (-!) = flip ($) infixr 5 !- (!-) = ($)
add2 x y = x + y add3 x y z = x + y + z add4 x y z u = x + y + z + u
testa1 = 1 -! add2 !- 3 + 4 testa2 = 1 -! add3 1 !- 3 + 4 testa3 = 1 - 2 -! add4 1 5 !- 3 * 4
All code is Haskell98.