úÎ>'8Ê?      !"#$%&'()*+,-./0123456789:;<=>CheckedException adds a phantom type parameter l to  SomeException Throws% is a type level binary relationship ( used to model a list of exceptions. .There is only one case in which the user must  add further instances to Throws. A If your sets of exceptions are hierarchical then you need to  teach  about the hierarchy.   Subtyping / As there is no way to automatically infer < the subcases of an exception, they have to be encoded = manually mirroring the hierarchy defined in the defined   instances.  For example, ) the following instance encodes that MyFileNotFoundException is  a subexception of  MyIOException :  B instance Throws MyFileNotFoundException (Caught MyIOException l) : is not a transitive relation and every ancestor relation " must be explicitly encoded.  N -- TopException I -- | I instance Throws MidException (Caught TopException l) -- | N -- MidException I instance Throws ChildException (Caught MidException l) -- | I instance Throws ChildException (Caught TopException l) -- | O -- ChildException  Note that = is automatically an ancestor of every other exception type. -A type level witness of a exception handler. ? SomeException* is at the top of the exception hierarchy  . = Capturing SomeException captures every possible exception 6@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefgh$MonadZeroException is thrown by MonadPlus g  FailException is thrown by Monad @  !"0A monad of explicitly typed, checked exceptions #.UncaughtException models unchecked exceptions +In order to declare an unchecked exception E, ! all that is needed is to make e an instance of #   instance UncaughtException E GNote that declaring an exception E as unchecked does not automatically S turn its children unchecked too. This is a shortcoming of the current encoding. $%&'=A Monad Transformer for explicitly typed checked exceptions. ()*+1Run a computation explicitly handling exceptions ,-.Run a safe computation /0Run a safe computation checking even unchecked (# ) exceptions 0The throw primitive 1,Rethrow an exception keeping the call trace 2The catch primitive 3Like 2$ but makes the call trace available 4CSequence two computations discarding the result of the second one. N If the first computation rises an exception, the second computation is run ' and then the exception is rethrown. 5JLike finally, but performs the second computation only when the first one  rises an exception 6acquire resource release resource  computation 7.Capture an exception e, wrap it, and rethrow. * Keeps the original monadic call trace. 891Run a computation explicitly handling exceptions :;Run a safe computation <+Run a computation checking even unchecked (UncaughtExceptions ) exceptions =)This function may be used as a value for f in F >$ !"#$%&'()*+,-./0123456789:;<=>$*'()+,-&%$./012345678#"9:;< !=>$ ! !"#$%&'()()*+,-./0123456789:;<=>0 "#&'()*+./0123456789;<=0"9;<'()*+./&#012345678=  i         !"#$%%&&''()*+,-../01234567#$89:;<=>?@ABCDEDFDGDHDIDJKLKMKNKOKPKQKRKSKTKUKVKWKXKYKZK[K\K]K^K_K`KaKbKcKdKeKfKgKhKiKjKkKlKmDnocontrol-monad-exception-0.9.0Control.Monad.ExceptionControl.Monad.Exception.CatchControl.Monad.Exception.ThrowsControl.Monad.Exception.Base!Control.Monad.Exception.Instancesbase Data.TypeableTypeable GHC.Exception SomeException fromException toException ExceptiontypeOffailure-0.1.0.1Control.FailureNothingExceptionTryErrortry WrapFailure wrapFailureFailurefailure monadloc-0.5Control.Monad.Loc withLocTHwithLocMonadLocCheckedExceptioncheckedExceptionThrowsCaught MonadCatchcatchcatchWithSrcLocMonadZeroException FailExceptionIdentity runIdentityEMUncaughtException ParanoidMode NoExceptions AnyExceptionEMTunEMT CallTracetryEMT tryEMTWithLoc runEMT_genrunEMTrunEMTParanoidthrowrethrowfinally onExceptionbracket wrapExceptionshowExceptionWithTracetryEM tryEMWithLocrunEM runEMParanoid mplusDefaultmapLeft$fThrowseCaughtGHC.Basefail>>=>>returnMonadFunctor Control.Monad MonadPlusmfilterapliftM5liftM4liftM3liftM2liftMunlesswhen replicateM_ replicateMfoldM_foldM zipWithM_zipWithM mapAndUnzipMjoinvoidforever<=<>=>msumforM_forMfilterMguardmapM_mapM sequence_sequence=<<mplusmzerofmap