[Haskell-beginners] list monad question

David Virebayre dav.vire+haskell at gmail.com
Fri Oct 30 08:09:50 EDT 2009

On Fri, Oct 30, 2009 at 12:44 PM, Matthias Guedemann
<matthias.guedemann at ovgu.de> wrote:

> a friend of mine wanted to write function (in Perl) that creates all tuples of
> length 3 of the elements of a given list,
> e.g. [(0,0,0),(0,0,1),(0,0,2),...,(5,5,5)] for the list [0..5]. Trying to get
> better at Haskell, I wrote a small function using the list monad for this (tuples
> replaced with lists)
> all3 ls = do
>  a <- ls
>  b <- ls
>  c <- ls
>  return [a,b,c]

Almost there :

all3 ls = do
  a <- ls
  b <- ls
  c <- ls
  return (a,b,c)

For each element a of list ls , for each element b of the same list
ls, and for each element c of the same list ls, make a tuple of them.
return the list of tall the tuples.

You could also write it with a list comprehension :

all3 ls = [ (a,b,c) | a <- ls, b <- ls, c <- ls ]


More information about the Beginners mailing list