[Haskell-beginners] Maybe monad and computations

Nicholas Vanderweit nick.vanderweit at gmail.com
Fri Sep 6 22:35:58 CEST 2013


It seems like he wants something like sequence, but for tuples. Say:

sequence2 :: Monad m => (m a, m b) -> m (a, b)
sequence2 (ma, mb) = ma >>= \a -> mb >>= \b -> return (a, b)

But without knowing the use case it's hard to know whether or not this
could be done simply with "sequence" and mapM*


Nick


On Fri, Sep 6, 2013 at 2:28 PM, Michael Steele <mikesteele81 at gmail.com>wrote:

> The `sequence`, `mapM`, and `mapM_` functions may be what you are looking
> for.
>
> let allTogether = sequence [doA, doB, doC, doZ]
> case allTogether of
>   Nothing -> ...
>   Just as -> ...
>
>
> Use `maybe` and `fromMaybe` to avoid case statements:
>
> fromMaybe "failure!" $ do
>     as <- sequence [doA, doB, doC, doZ]
>     return $ "Success: " ++ show (length as)
>
> The `catMaybes` function can be used to execute each computation in
> the list even if some of them return nothing.
>
> On Fri, Sep 6, 2013 at 12:49 PM, Emmanuel Touzery <etouzery at gmail.com>
> wrote:
> > Hello,
> >
> >  I'm often using the Maybe monad to combine Maybe computations one after
> the
> > other without conditionals.
> >
> >  But I'm not sure how to do it, when I have several operations which
> return
> > Maybe and I want all the indiviual values in the end, not a combination
> of
> > the values.
> >
> >  Currently I do:
> >
> > let allTogether = do
> >   ma <- doA
> >   mb <- doB
> >   return (ma, mb)
> > case allTogether of
> >   Nothing -> ...
> >   Just (a, b) -> ...
> >
> >  This way in this case I have one case instead of two, however I'm sure
> > there must be a nicer way to achieve this result?
> >
> >  Thank you!
> >
> > Emmanuel
> >
> > _______________________________________________
> > Beginners mailing list
> > Beginners at haskell.org
> > http://www.haskell.org/mailman/listinfo/beginners
> >
>
>
>
> --
> -- Michael Steele
>
> _______________________________________________
> Beginners mailing list
> Beginners at haskell.org
> http://www.haskell.org/mailman/listinfo/beginners
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/beginners/attachments/20130906/4eb0aa24/attachment.htm>


More information about the Beginners mailing list