Infix expressions
oleg at pobox.com
oleg at pobox.com
Tue Mar 14 23:33:33 EST 2006
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.
More information about the Haskell-prime
mailing list