@@ -3,6 +3,8 @@
33{-# LANGUAGE FlexibleInstances #-}
44{-# LANGUAGE FlexibleContexts #-}
55{-# LANGUAGE UndecidableInstances #-}
6+{-# LANGUAGE DataKinds #-}
7+{-# LANGUAGE TypeOperators #-}
68{-# LANGUAGE GeneralizedNewtypeDeriving #-}
79module Control.Monad.Ether.Reader
810 ( module Control.Monad.Ether.Reader
@@ -12,21 +14,21 @@ module Control.Monad.Ether.Reader
1214import Data.Proxy (Proxy(Proxy))
1315import Control.Monad.Trans (lift)
1416
15−import Control.Ether.Core (EtherData)
17+import Control.Ether.Core
1618import Control.Monad.Trans.Ether.Reader
1719
1820-- for mtl instances
19−import qualified Control.Monad.Trans.Cont as Cont (ContT , liftLocal)
20−import qualified Control.Monad.Trans.Except as Except (ExceptT , mapExceptT)
21−import qualified Control.Monad.Trans.Identity as Identity (IdentityT, mapIdentityT)
22−import qualified Control.Monad.Trans.List as List (ListT , mapListT)
23−import qualified Control.Monad.Trans.Maybe as Maybe (MaybeT , mapMaybeT)
24−import qualified Control.Monad.Trans.State.Lazy as State.Lazy (StateT , mapStateT)
25−import qualified Control.Monad.Trans.State.Strict as State.Strict (StateT , mapStateT)
26−import qualified Control.Monad.Trans.Writer.Lazy as Writer.Lazy (WriterT , mapWriterT)
27−import qualified Control.Monad.Trans.Writer.Strict as Writer.Strict (WriterT , mapWriterT)
28−
29−class Monad m => MonadEtherReader tag m where
21+import qualified Control.Monad.Trans.Cont as Trans (ContT , liftLocal)
22+import qualified Control.Monad.Trans.Except as Trans (ExceptT , mapExceptT)
23+import qualified Control.Monad.Trans.Identity as Trans (IdentityT, mapIdentityT)
24+import qualified Control.Monad.Trans.List as Trans (ListT , mapListT)
25+import qualified Control.Monad.Trans.Maybe as Trans (MaybeT , mapMaybeT)
26+import qualified Control.Monad.Trans.State.Lazy as Trans.Lazy (StateT , mapStateT)
27+import qualified Control.Monad.Trans.State.Strict as Trans.Strict (StateT , mapStateT)
28+import qualified Control.Monad.Trans.Writer.Lazy as Trans.Lazy (WriterT , mapWriterT)
29+import qualified Control.Monad.Trans.Writer.Strict as Trans.Strict (WriterT , mapWriterT)
30+
31+class MonadEther m => MonadEtherReader tag m where
3032
3133 etherLocal :: proxy tag -> (EtherData tag -> EtherData tag) -> m a -> m a
3234
@@ -36,7 +38,8 @@ class Monad m => MonadEtherReader tag m where
3638 etherReader :: proxy tag -> (EtherData tag -> a) -> m a
3739 etherReader proxy f = fmap f (etherAsk proxy)
3840
39−instance {-# OVERLAPS #-} Monad m => MonadEtherReader tag (EtherReaderT tag m) where
41+instance {-# OVERLAPPING #-} (Monad m, EtherTagless tag m)
42+ => MonadEtherReader tag (EtherReaderT tag m) where
4043 etherAsk proxy = etherReaderT proxy return
4144 etherLocal proxy f m = etherReaderT proxy (runEtherReaderT proxy m . f)
4245
@@ -46,38 +49,38 @@ instance MonadEtherReader tag m => MonadEtherReader tag (EtherReaderT tag' m) wh
4649
4750-- Instances for mtl transformers
4851
49−instance MonadEtherReader tag m => MonadEtherReader tag (Cont.ContT r m) where
52+instance MonadEtherReader tag m => MonadEtherReader tag (Trans.ContT r m) where
5053 etherAsk proxy = lift (etherAsk proxy)
51− etherLocal proxy = Cont.liftLocal (etherAsk proxy) (etherLocal proxy)
54+ etherLocal proxy = Trans.liftLocal (etherAsk proxy) (etherLocal proxy)
5255
53−instance MonadEtherReader tag m => MonadEtherReader tag (Except.ExceptT e m) where
56+instance MonadEtherReader tag m => MonadEtherReader tag (Trans.ExceptT e m) where
5457 etherAsk proxy = lift (etherAsk proxy)
55− etherLocal proxy = Except.mapExceptT . etherLocal proxy
58+ etherLocal proxy = Trans.mapExceptT . etherLocal proxy
5659
57−instance MonadEtherReader tag m => MonadEtherReader tag (Identity.IdentityT m) where
60+instance MonadEtherReader tag m => MonadEtherReader tag (Trans.IdentityT m) where
5861 etherAsk proxy = lift (etherAsk proxy)
59− etherLocal proxy = Identity.mapIdentityT . etherLocal proxy
62+ etherLocal proxy = Trans.mapIdentityT . etherLocal proxy
6063
61−instance MonadEtherReader tag m => MonadEtherReader tag (List.ListT m) where
64+instance MonadEtherReader tag m => MonadEtherReader tag (Trans.ListT m) where
6265 etherAsk proxy = lift (etherAsk proxy)
63− etherLocal proxy = List.mapListT . etherLocal proxy
66+ etherLocal proxy = Trans.mapListT . etherLocal proxy
6467
65−instance MonadEtherReader tag m => MonadEtherReader tag (Maybe.MaybeT m) where
68+instance MonadEtherReader tag m => MonadEtherReader tag (Trans.MaybeT m) where
6669 etherAsk proxy = lift (etherAsk proxy)
67− etherLocal proxy = Maybe.mapMaybeT . etherLocal proxy
70+ etherLocal proxy = Trans.mapMaybeT . etherLocal proxy
6871
69−instance MonadEtherReader tag m => MonadEtherReader tag (State.Lazy.StateT s m) where
72+instance MonadEtherReader tag m => MonadEtherReader tag (Trans.Lazy.StateT s m) where
7073 etherAsk proxy = lift (etherAsk proxy)
71− etherLocal proxy = State.Lazy.mapStateT . etherLocal proxy
74+ etherLocal proxy = Trans.Lazy.mapStateT . etherLocal proxy
7275
73−instance MonadEtherReader tag m => MonadEtherReader tag (State.Strict.StateT s m) where
76+instance MonadEtherReader tag m => MonadEtherReader tag (Trans.Strict.StateT s m) where
7477 etherAsk proxy = lift (etherAsk proxy)
75− etherLocal proxy = State.Strict.mapStateT . etherLocal proxy
78+ etherLocal proxy = Trans.Strict.mapStateT . etherLocal proxy
7679
77−instance (Monoid w, MonadEtherReader tag m) => MonadEtherReader tag (Writer.Lazy.WriterT w m) where
80+instance (Monoid w, MonadEtherReader tag m) => MonadEtherReader tag (Trans.Lazy.WriterT w m) where
7881 etherAsk proxy = lift (etherAsk proxy)
79− etherLocal proxy = Writer.Lazy.mapWriterT . etherLocal proxy
82+ etherLocal proxy = Trans.Lazy.mapWriterT . etherLocal proxy
8083
81−instance (Monoid w, MonadEtherReader tag m) => MonadEtherReader tag (Writer.Strict.WriterT w m) where
84+instance (Monoid w, MonadEtherReader tag m) => MonadEtherReader tag (Trans.Strict.WriterT w m) where
8285 etherAsk proxy = lift (etherAsk proxy)
83− etherLocal proxy = Writer.Strict.mapWriterT . etherLocal proxy
86+ etherLocal proxy = Trans.Strict.mapWriterT . etherLocal proxy