>>> 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
["-f", "foo"]
["--foo", "foo"]
["-df", "foo"]
["--foo=foo"]
["-ffoo"]