Difference between revisions of "Infix expressions"

From HaskellWiki
Jump to navigation Jump to search
 
m (InfixExpressions moved to Infix Expressions)

Revision as of 20:43, 16 March 2006

WORK IN PROGRESS

Display all headersFrom: dons@cse.unsw.edu.au (Donald Bruce Stewart)
To: Simon Peyton-Jones <simonpj@microsoft.com>
Date: Wed, 15 Mar 2006 23:25:34 +1100
Cc: haskell-prime@haskell.org, oleg@pobox.com
Subject: Re: Infix expressions

simonpj:
> 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.
 
Yes, this is _exactly_ the kind of thing to add to the Idioms 
page of the wiki, here: 
   http://www.haskell.org/haskellwiki/Category:Idioms 
 
So if anyone knows of an interesting Haskell trick, and wants to write
about it,  add a page!
 
We should take advantage of the fact we have a lot of good authors in
the community to document all the interesting things that we come up
with 
 
-- Don
 
>  
> Simon
>  
> | -----Original Message-----
> | From: haskell-prime-bounces@haskell.org
> [mailto:haskell-prime-bounces@haskell.org] On Behalf Of
> | oleg@pobox.com
> | Sent: 15 March 2006 04:34
> | To: doaitse@cs.uu.nl; haskell-prime@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@haskell.org
> | http://haskell.org/mailman/listinfo/haskell-prime
> _______________________________________________
> Haskell-prime mailing list
> Haskell-prime@haskell.org
> http://haskell.org/mailman/listinfo/haskell-prime
_______________________________________________
Haskell-prime mailing list
Haskell-prime@haskell.org
http://haskell.org/mailman/listinfo/haskell-prime