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