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@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@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@haskell.org
> http://www.haskell.org/mailman/listinfo/beginners
>



--
-- Michael Steele

_______________________________________________
Beginners mailing list
Beginners@haskell.org
http://www.haskell.org/mailman/listinfo/beginners