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