on master help sign in
MonadExcept instance for WrappedEther
0f9f8fcIndex Int
src/Control/Ether/Wrapped.hs+6
@@ -13,9 +13,11 @@ import Control.Monad.Fix (MonadFix)
13import Control.Monad.IO.Class (MonadIO)
13import Control.Monad.IO.Class (MonadIO)
14import Control.Monad.Ether.Reader
14import Control.Monad.Ether.Reader
15import Control.Monad.Ether.State
15import Control.Monad.Ether.State
16+import Control.Monad.Ether.Except
16
17
17import qualified Control.Monad.Reader as Class
18import qualified Control.Monad.Reader as Class
18import qualified Control.Monad.State as Class
19import qualified Control.Monad.State as Class
20+import qualified Control.Monad.Except as Class
19
21
20newtype WrappedEther tag m a = WrapEther { unwrapEther :: m a }
22newtype WrappedEther tag m a = WrapEther { unwrapEther :: m a }
21 deriving ( Functor, Applicative, Alternative, Monad, MonadPlus
23 deriving ( Functor, Applicative, Alternative, Monad, MonadPlus
@@ -29,5 +31,9 @@ instance MonadState tag s m => Class.MonadState s (WrappedEther tag m) where
29 get = WrapEther $ get (Proxy :: Proxy tag)
31 get = WrapEther $ get (Proxy :: Proxy tag)
30 put = WrapEther . put (Proxy :: Proxy tag)
32 put = WrapEther . put (Proxy :: Proxy tag)
31
33
34+instance MonadExcept tag e m => Class.MonadError e (WrappedEther tag m) where
35+ throwError = WrapEther . throw (Proxy :: Proxy tag)
36+ catchError m h = WrapEther $ catch (Proxy :: Proxy tag) (unwrapEther m) (unwrapEther . h)
37+
32ethered :: proxy tag -> WrappedEther tag m a -> m a
38ethered :: proxy tag -> WrappedEther tag m a -> m a
33ethered _proxy = unwrapEther
39ethered _proxy = unwrapEther
src/Control/Monad/Ether/Except.hs+3
@@ -44,8 +44,11 @@ import qualified Control.Monad.Trans.Writer.Strict as Trans.W.Strict
44
44
45class Monad m => MonadExcept tag e m | m tag -> e where
45class Monad m => MonadExcept tag e m | m tag -> e where
46
46
47+ -- | Is used within a monadic computation to begin exception processing.
47 throw :: proxy tag -> e -> m a
48 throw :: proxy tag -> e -> m a
48
49
50+ -- | A handler function to handle previous exceptions and return to
51+ -- normal execution.
49 catch :: proxy tag -> m a -> (e -> m a) -> m a
52 catch :: proxy tag -> m a -> (e -> m a) -> m a
50
53
51instance {-# OVERLAPPING #-} Monad m => MonadExcept tag e (ExceptT tag e m) where
54instance {-# OVERLAPPING #-} Monad m => MonadExcept tag e (ExceptT tag e m) where