[Haskell-cafe] operating on nested monads
tpledger at ihug.co.nz
Sat Mar 27 20:35:08 EST 2004
Marco Righele wrote:
>I have some operations that have to be done in sequence, with
>each one having the result of the previous as input.
>They can fail, so they have signature
>a -> Maybe b
>Checking for error can be quite tedious so I use monadic operations:
>f :: a -> Maybe b
>do y <- foo x
> z <- boo y
> moo z
>The problems arise when I try to do the same thing within the IO Monad,
>i.e. the functions have signature
>a->IO (Maybe b)
>How can I achieve the same effect (if it is ever possible)?
>I feel like it should be something almost trivial, but I really can't get it.
How about giving your functions the type
a -> IO b
and representing failure with either 'fail', 'ioError' or 'throwError'?
They propagate the same way as Nothing in the Maybe monad.
More information about the Haskell-Cafe