[Haskell-cafe] Re: (possibly) a list comprehensions question

Ozgur Akgun ozgurakgun at gmail.com
Thu Nov 19 10:21:51 EST 2009


You're right. I do that sometimes, but I must make a habit of "hoogling".

2009/11/19 yairchu at gmail.com <yairchu at gmail.com>

> > This is what happens all the time, the thing I am trying to implement is
> already in the library!
>
> You can easily find those library functions using Hoogle.
> In this case Hoogle gives the "sequence" function as its second result
> for the query "[[a]] -> [[a]]":
>
> Data.List transpose :: [[a]] -> [[a]]
> Prelude sequence :: Monad m => [m a] -> m [a]
>
> See: http://haskell.org/hoogle/?hoogle=%5B%5Ba%5D%5D+-%3E+%5B%5Ba%5D%5D
>
> On Nov 19, 3:58 pm, Ozgur Akgun <ozgurak... at gmail.com> wrote:
> > Thanks for the both quick answers.
> >
> > This is what happens all the time, the thing I am trying to implement is
> > already in the library!
> >
> > Neil,
> > I clearly understood the way you implemented. Actually I had a similar
> > implementation with some problems, one of which is the base-case you
> > mentioned.
> >
> > Eugene,
> > I'll definitely have a look at the implementation of sequence.
> >
> > Cheers!
> >
> > 2009/11/19 Neil Brown <nc... at kent.ac.uk>
> >
> >
> >
> >
> >
> > > Ozgur Akgun wrote:
> >
> > >> Anyway, just forget the fact that these funstions do not do a check on
> the
> > >> length of the input list for a moment. My question is, how can I
> generalize
> > >> this function to accept a list of lists of arbitrary length, and
> produce the
> > >> required result.
> >
> > > Hi,
> >
> > > The concise solution is the list monad, as already posted.  If that
> > > confuses you, here is a version using list comprehensions (well,
> mostly):
> >
> > > allPossibilities :: [[a]] -> [[a]]
> > > allPossibilities [] = [[]]
> > > allPossibilities (l:ls) = [ x : xs | x <- l, xs <- allPossibilities ls]
> >
> > > The second line prefixes all possibilities from the later lists with
> every
> > > element from the the first list.  Note that the base-case is crucial;
> if it
> > > is the empty list [], that "xs <- allPossibilities ls" will not find
> any
> > > elements, and thus the list comprehension becomes the empty list, and
> the
> > > whole thing falls apart.  Thus the base case must be the list
> containing the
> > > empty list, so that you have one possibility arising at the end upon
> which
> > > to prefix the items.  Hope that makes sense...
> >
> > > Thanks,
> >
> > > Neil.
> >
> > --
> > Ozgur Akgun
> >
> > _______________________________________________
> > Haskell-Cafe mailing list
> > Haskell-C... at haskell.orghttp://
> www.haskell.org/mailman/listinfo/haskell-cafe
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe
>



-- 
Ozgur Akgun
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.haskell.org/pipermail/haskell-cafe/attachments/20091119/e2e5caa2/attachment.html


More information about the Haskell-Cafe mailing list