Infix expressions
Simon PeytonJones
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: haskellprimebounces at haskell.org
[mailto:haskellprimebounces at haskell.org] On Behalf Of
 oleg at pobox.com
 Sent: 15 March 2006 04:34
 To: doaitse at cs.uu.nl; haskellprime 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

 Chungchieh 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/haskellcafe/2002July/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.
 _______________________________________________
 Haskellprime mailing list
 Haskellprime at haskell.org
 http://haskell.org/mailman/listinfo/haskellprime
More information about the Haskellprime
mailing list