[Haskell-cafe] can someone explain monad transformers to me, or how do you combine maybe and IO?

Anatoly Yakovenko aeyakovenko at gmail.com
Mon Nov 12 18:59:39 EST 2007

I wanted something that would work like liftM but with IO as well, so
something like this:

> liftM ((+) 1) $ Just 1
Just 2

but with the function lifted being of type (a -> IO b).  so I came up with

maybeIO::(a -> IO b) -> (Maybe a -> IO (Maybe b))
maybeIO ff = (\ aa ->
               case aa of
                  Nothing -> return $ Nothing
                  Just vv -> do
                     rv <- ff vv
                     return $ Just rv)

incIO:: Int -> IO Int
incIO ii = return $ ii + 1

> maybeIO incIO $ Just 1
Just 2

works just like I want it to.  But isn't this something that a monad
transformer should be able to do?

More information about the Haskell-Cafe mailing list