úΕH      Safe-InferredM 2This is basically specialized 'Either String', or  with error messages.Convert  into another T. If you don't have proper exception handling in your monad, this can throw errors. GrunExceptional (Failure s) = fail s runExceptional (Success s) = pure s Convert a  to an  :fromMaybe s Nothing = fail s fromMaybe s (Just x) = pure x Convert an  into a .. This function disregards the error message. :toMaybe (Success x) = Just x toMaybe (Failure _) = Nothing Convert an   to an  :fromEither (Left s) = fail s fromEither (Right x) = pure x Convert an  to an   <toEither (Failure s) = Left s toEither (Success x) = Right xA wrapper around &. Encapsulates I/O exceptions in the  monad. DRun an exception-prone action in another monad, catch the errors in . Get all of the s from a bunch of s Get all of the es from a bunch of s Given a number of  values: If all are ful, then return / with the sucesses * If there is at least one , then return  the list of error messages This is -safe, so to speak. That is, fail = Failure            exceptional-0.2.0.0Control.Exceptional ExceptionalSuccessFailurerunExceptional fromMaybetoMaybe fromEithertoEitherexceptIO exceptionalfailures successesfoldExceptional$fMonadExceptional$fAlternativeExceptional$fApplicativeExceptional$fFunctorExceptionalbase Data.MaybeMaybeGHC.BaseMonad Data.EitherEitherStringSystem.IO.Error tryIOErrorRightLeftfail