# [Haskell-beginners] flatten comma operator

Arlen Cuss a at unnali.com
Wed Jun 6 13:06:04 CEST 2012

```On Wednesday, 6 June 2012 at 5:46 PM, Kees Bleijenberg wrote:
> 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.

As Brent pointed out, you can't without making it very specific. Each length of tuple with its combination of types is a unique type itself; compare to a list, where [a] is the type for a list of any length (including zero) containing elements of type a. A list is trivial to append to, whereas tuples are not designed for "extension" in this manner, per se.
> Indeed (,,) 1 2 3 is (1,2,3). But I do not understand what is happening. Is
> (,,) predefined? Probably not.

And as Brent pointed out also, it is. :)  By the way, so is (,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,)!  I suspect GHC allows any number.  The Haskell Report section 6.1.4 [1] says implementations must support up to at least 15.

Cheers,

Arlen

>
>
> -----Oorspronkelijk bericht-----
> Van: Arlen Cuss [mailto:a at unnali.com]
> Verzonden: woensdag 6 juni 2012 8:43
> Aan: Kees Bleijenberg
> CC: beginners at haskell.org (mailto: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
> guess here).
>
> 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
> >
>
>
>
>
>
>
> _______________________________________________
> Beginners mailing list
> Beginners at haskell.org (mailto:Beginners at haskell.org)