Infix expressions

Henk-Jan van Tuyl hjgtuyl at chello.nl
Thu Mar 16 15:51:26 EST 2006


L.S.,

I created a preliminary page, called Infix_Expressions, that you can find  
via
   http://www.haskell.org/haskellwiki/Category:Idioms

Henk-Jan van Tuyl


On Wed, 15 Mar 2006 13:25:34 +0100, Donald Bruce Stewart  
<dons at cse.unsw.edu.au> wrote:

> 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 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.
>> | _______________________________________________
-- 

Met vriendelijke groet,
Henk-Jan van Tuyl

--
http://members.chello.nl/hjgtuyl
--

Using Opera's revolutionary e-mail client:
https://secure.bmtmicro.com/opera/buy-opera.html?AID=789433



More information about the Haskell-prime mailing list