1) Maybe monad
getData :: Maybe Data1
getMoreData :: Data1 -> Maybe Data2
Note: the monad is probably not just Maybe if it talks to the outside world but more in 2)List monad
getData :: [Data1]
getMoreData :: Data1 -> [Data2]
Dont' know about continuations.2) There are a few approaches but the most popular are monad transformers, building stacks to combine the effects. For example, to speak with the outside world we need 'IO'. To add failure we might use the Maybe transformer
MaybeT m a
to build type IOMaybe a = MaybeT IO a