on master help sign in
Wrapped MonadWriter
commitcf3ef4e900de55f813d9dd0af2e382165f6efdfc authorIndex Int <vlad.z.4096@gmail.com> dateSat 13 Jun 2015, 18:42 (11 years ago) parentb8547a8
1 file changed+10−3
src/Control/Ether/Wrapped.hs+10−3
src/Control/Ether/Wrapped.hs+10−3
@@ -11,13 +11,15 @@ import Control.Applicative (Alternative)
1111import Control.Monad (MonadPlus)
1212import Control.Monad.Fix (MonadFix)
1313import Control.Monad.IO.Class (MonadIO)
14−import Control.Monad.Ether.Reader
15−import Control.Monad.Ether.State
16−import Control.Monad.Ether.Except
14+import Control.Monad.Ether.Reader.Class
15+import Control.Monad.Ether.State.Class
16+import Control.Monad.Ether.Except.Class
17+import Control.Monad.Ether.Writer.Class
1718
1819import qualified Control.Monad.Reader as Class
1920import qualified Control.Monad.State as Class
2021import qualified Control.Monad.Except as Class
22+import qualified Control.Monad.Writer as Class
2123
2224newtype WrappedEther tag m a = WrapEther { unwrapEther :: m a }
2325 deriving ( Functor, Applicative, Alternative, Monad, MonadPlus
@@ -35,5 +37,10 @@ instance MonadExcept tag e m => Class.MonadError e (WrappedEther tag m) where
3537 throwError = WrapEther . throw (Proxy :: Proxy tag)
3638 catchError m h = WrapEther $ catch (Proxy :: Proxy tag) (unwrapEther m) (unwrapEther . h)
3739
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+
3845ethered :: proxy tag -> WrappedEther tag m a -> m a
3946ethered _proxy = unwrapEther