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