[Haskell-cafe] operating on nested monads

Tom Pledger tpledger at ihug.co.nz
Sat Mar 27 20:35:08 EST 2004

Marco Righele wrote:

>Hello everyone,
>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 mailing list