on master help sign in
Newtype instance for WrappedEther
commit0a34126a85d3f4e07079cdef3bfae6633f1b5f68 authorIndex Int <vlad.z.4096@gmail.com> dateSun 12 Jul 2015, 02:47 (11 years ago) parenteea928c
1 file changed+8−1
src/Control/Ether/Wrapped.hs+8−1
src/Control/Ether/Wrapped.hs+8−1
@@ -1,3 +1,4 @@
1+{-# LANGUAGE DeriveGeneric #-}
12{-# LANGUAGE MultiParamTypeClasses #-}
23{-# LANGUAGE FlexibleInstances #-}
34{-# LANGUAGE UndecidableInstances #-}
@@ -31,6 +32,9 @@ import Control.Applicative
3132import Control.Monad (MonadPlus)
3233import Control.Monad.Fix (MonadFix)
3334import Control.Monad.IO.Class (MonadIO)
35+import GHC.Generics (Generic)
36+import qualified Control.Newtype as NT
37+
3438import Control.Monad.Ether.Reader.Class
3539import Control.Monad.Ether.State.Class
3640import Control.Monad.Ether.Except.Class
@@ -43,9 +47,12 @@ import qualified Control.Monad.Writer as Class
4347
4448-- | Wrap a monad to attach a tag to it.
4549newtype WrappedEther tag m a = WrapEther { unwrapEther :: m a }
46− deriving ( Functor, Applicative, Alternative, Monad, MonadPlus
50+ deriving ( Generic
51+ , Functor, Applicative, Alternative, Monad, MonadPlus
4752 , MonadFix, MonadIO )
4853
54+instance NT.Newtype (WrappedEther tag m a)
55+
4956-- | Annotate a polymorphic monadic computation with a tag.
5057ethered :: proxy tag -> WrappedEther tag m a -> m a
5158ethered _proxy = unwrapEther