@@ -1,3 +1,4 @@
1+{-# LANGUAGE DeriveGeneric #-}
1{-# LANGUAGE MultiParamTypeClasses #-}
2{-# LANGUAGE MultiParamTypeClasses #-}
2{-# LANGUAGE TypeFamilies #-}
3{-# LANGUAGE TypeFamilies #-}
3{-# LANGUAGE FlexibleInstances #-}
4{-# LANGUAGE FlexibleInstances #-}
@@ -35,6 +36,8 @@ import Control.Monad.Fix (MonadFix)
35import Control.Monad.Trans.Class (MonadTrans, lift)
36import Control.Monad.Trans.Class (MonadTrans, lift)
36import Control.Monad.IO.Class (MonadIO)
37import Control.Monad.IO.Class (MonadIO)
37import Control.Ether.Tags (Taggable(..), Tagged(..))
38import Control.Ether.Tags (Taggable(..), Tagged(..))
39+import GHC.Generics (Generic)
40+import qualified Control.Newtype as NT
39import qualified Control.Monad.Signatures as Sig
42import qualified Control.Monad.Signatures as Sig
40import qualified Control.Monad.Trans.Reader as Trans
43import qualified Control.Monad.Trans.Reader as Trans
@@ -59,17 +62,18 @@ type Reader tag r = ReaderT tag r Identity
59-- The 'return' function ignores the environment, while '>>=' passes
62-- The 'return' function ignores the environment, while '>>=' passes
60-- the inherited environment to both subcomputations.
63-- the inherited environment to both subcomputations.
61newtype ReaderT tag r m a = ReaderT (Trans.ReaderT r m a)
64newtype ReaderT tag r m a = ReaderT (Trans.ReaderT r m a)
62− deriving ( Functor, Applicative, Alternative, Monad, MonadPlus
66+ , Functor, Applicative, Alternative, Monad, MonadPlus
63 , MonadFix, MonadTrans, MonadIO )
67 , MonadFix, MonadTrans, MonadIO )
69+instance NT.Newtype (ReaderT tag r m a)
65instance Taggable (ReaderT tag r m) where
71instance Taggable (ReaderT tag r m) where
66 type Tag (ReaderT tag r m) = 'Just tag
72 type Tag (ReaderT tag r m) = 'Just tag
67 type Inner (ReaderT tag r m) = 'Just m
73 type Inner (ReaderT tag r m) = 'Just m
69instance Tagged (ReaderT tag r m) tag where
75instance Tagged (ReaderT tag r m) tag where
70 type Untagged (ReaderT tag r m) = Trans.ReaderT r m
76 type Untagged (ReaderT tag r m) = Trans.ReaderT r m
72− untagged _ (ReaderT a) = a
74-- | Constructor for computations in the reader monad transformer.
78-- | Constructor for computations in the reader monad transformer.
75readerT :: proxy tag -> (r -> m a) -> ReaderT tag r m a
79readerT :: proxy tag -> (r -> m a) -> ReaderT tag r m a