From what I understand, you have:
a :: IO (Maybe X)
b :: X -> IO (Maybe Y)
IO (Maybe a) MaybeT IO a, : MaybeT :
MaybeT :: IO (Maybe a) -> MaybeT IO a
- runMaybeT:
runMaybeT :: MaybeT IO a -> IO (MaybeT a)
MaybeT , ,
:
MaybeT a >>= (\x -> MaybeT (b x)) :: MaybeT IO Y
MaybeT IO Y. IO (Maybe Y), runMaybeT.
"" a b:
andThen :: IO (Maybe a) -> (a -> IO (Maybe b)) -> IO (Maybe b)
andThen a b = runMaybeT $ MaybeT a >>= (\x -> MaybeT (b x) )
, , ,
, MaybeT IO
monad, >>= runMaybeT
.