on master help sign in
Wrapped MonadWriter
cf3ef4eIndex Int
src/Control/Ether/Wrapped.hs+10−3
@@ -11,13 +11,15 @@ import Control.Applicative (Alternative)
11import Control.Monad (MonadPlus)
11import Control.Monad (MonadPlus)
12import Control.Monad.Fix (MonadFix)
12import Control.Monad.Fix (MonadFix)
13import Control.Monad.IO.Class (MonadIO)
13import Control.Monad.IO.Class (MonadIO)
14−import Control.Monad.Ether.Reader
14+import Control.Monad.Ether.Reader.Class
15−import Control.Monad.Ether.State
15+import Control.Monad.Ether.State.Class
16−import Control.Monad.Ether.Except
16+import Control.Monad.Ether.Except.Class
17+import Control.Monad.Ether.Writer.Class
17
18
18import qualified Control.Monad.Reader as Class
19import qualified Control.Monad.Reader as Class
19import qualified Control.Monad.State as Class
20import qualified Control.Monad.State as Class
20import qualified Control.Monad.Except as Class
21import qualified Control.Monad.Except as Class
22+import qualified Control.Monad.Writer as Class
21
23
22newtype WrappedEther tag m a = WrapEther { unwrapEther :: m a }
24newtype WrappedEther tag m a = WrapEther { unwrapEther :: m a }
23 deriving ( Functor, Applicative, Alternative, Monad, MonadPlus
25 deriving ( Functor, Applicative, Alternative, Monad, MonadPlus
@@ -35,5 +37,10 @@ instance MonadExcept tag e m => Class.MonadError e (WrappedEther tag m) where
35 throwError = WrapEther . throw (Proxy :: Proxy tag)
37 throwError = WrapEther . throw (Proxy :: Proxy tag)
36 catchError m h = WrapEther $ catch (Proxy :: Proxy tag) (unwrapEther m) (unwrapEther . h)
38 catchError m h = WrapEther $ catch (Proxy :: Proxy tag) (unwrapEther m) (unwrapEther . h)
37
39
40+instance MonadWriter tag w m => Class.MonadWriter w (WrappedEther tag m) where
41+ tell = WrapEther . tell (Proxy :: Proxy tag)
42+ listen = WrapEther . listen (Proxy :: Proxy tag) . unwrapEther
43+ pass = WrapEther . pass (Proxy :: Proxy tag) . unwrapEther
44+
38ethered :: proxy tag -> WrappedEther tag m a -> m a
45ethered :: proxy tag -> WrappedEther tag m a -> m a
39ethered _proxy = unwrapEther
46ethered _proxy = unwrapEther