>>> import Control.Monad.Except
>>> canFail = throwError "it failed" :: Except String Int >>> final = return 42 :: Except String IntCan be combined by allowing the first function to fail:
>>> runExcept $ canFail *> final Left "it failed"
>>> runExcept $ optional canFail *> final Right 42