[Haskell-beginners] [m [a]] -> m [a]

Daniel Fischer daniel.is.fischer at googlemail.com
Wed Aug 17 14:33:20 CEST 2011


On Wednesday 17 August 2011, 14:05:43, Guy wrote:
> On 17/08/2011 14:32, Daniel Fischer wrote:
> > On Wednesday 17 August 2011, 13:20:55, Guy wrote:
> >> Is there a function which can do this, where m is not mplus?
> >> 
> >> I would like all the lists to be joined inside the monad with ++.
> > 
> > sequence gives you m [[a]], then an fmap concat (or liftM concat,
> > since fmap requires an additional Functor constraint) flattens the
> > resulting list to m [a].
> 
> Thanks. I was hoping that there would be some kind of fold that could do
> this; I take it there isn't one?
> 

Well, sequence is a fold, and concat is a fold. You can fuse them

foldr (\x xs -> x >>= \ys -> xs >>= \zs -> return (ys ++ zs)) (return [])

but is that really more readable?



More information about the Beginners mailing list