[Haskell-beginners] flatten comma operator
k.bleijenberg at inter.nl.net
Wed Jun 6 09:46:58 CEST 2012
This is indeed the code I was talking about.
I did not understand how I could create (1,2,3) with the comma operator
(,)((,) 1 2) 3 = ((1,2),3) and not (1,2,3). That's why I thought I needed a
kind of join operation to 'flatten' this.
Indeed (,,) 1 2 3 is (1,2,3). But I do not understand what is happening. Is
(,,) predefined? Probably not.
Van: Arlen Cuss [mailto:a at unnali.com]
Verzonden: woensdag 6 juni 2012 8:43
Aan: Kees Bleijenberg
CC: beginners at haskell.org
Onderwerp: Re: [Haskell-beginners] flatten comma operator
By the way, is the excerpt from RWH involving liftA2 the chapter on using
Parsec? If so, this may be the code snippet you refer to:
-- file: ch16/FormApp.hs a_pair :: CharParser () (String, Maybe String)
a_pair = liftA2 (,) (many1 a_char) (optionMaybe (char '=' *> many a_char))
In this case, liftA2 is promoting the (,) operation to work with the two
operations in the CharParser applicative functor.
(,) is of type "a -> b -> (a,b)", so without lifting, we'd end up with
something like "(CharParser () String, CharParser () Maybe String)" (just a
liftA2 produces a new applicative functor action which computes each of
(many1 a_char) and (optionMaybe (char '=' *> many a_char)), then gives the
pure results to (,).
On Wednesday, 6 June 2012 at 4:36 PM, Arlen Cuss wrote:
> If (,) is a function that takes two elements and returns the 2-tuple,
> have you considered something like (,,)? :)
> On Wednesday, 6 June 2012 at 4:33 PM, Kees Bleijenberg wrote:
> > In 'Real World Haskell' I found code like LiftA2 (,) ....
> > Looks odd. But after some experimenting in winghci I found that (,) 1 2
is valid code and is equal to (1,2).
> > Now I wonder how to create (1,2,3). I think you need a join or a flatten
function or ...? Join doesn't work?
> > Kees
> > _______________________________________________
> > Beginners mailing list
> > Beginners at haskell.org (mailto:Beginners at haskell.org)
> > http://www.haskell.org/mailman/listinfo/beginners
More information about the Beginners