Infix expressions
Simon Peyton-Jones
simonpj at microsoft.com
Wed Mar 15 03:34:02 EST 2006
I often wish that cool tricks like this could be collected on the
Haskell web site. Now that it's a wiki, anyone could do that.
Simon
| -----Original Message-----
| From: haskell-prime-bounces at haskell.org
[mailto:haskell-prime-bounces at haskell.org] On Behalf Of
| oleg at pobox.com
| Sent: 15 March 2006 04:34
| To: doaitse at cs.uu.nl; haskell-prime at haskell.org
| Subject: Infix expressions
|
|
| 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.
| _______________________________________________
| Haskell-prime mailing list
| Haskell-prime at haskell.org
| http://haskell.org/mailman/listinfo/haskell-prime
More information about the Haskell-prime
mailing list