diff --git a/CHANGELOG.markdown b/CHANGELOG.markdown index 19b736ba55516209ff2b94a9f1dd2a5d78f2f388..4089f093a1304598eb0add4ef6a82c0b078e55fe 100644 --- a/CHANGELOG.markdown +++ b/CHANGELOG.markdown @@ -6,7 +6,7 @@ Unreleased `Control.Monad.Error.Class`, and re-export from `Control.Monad.Except`. * Remove `Control.Monad.List` and `Control.Monad.Error` * Remove instances of deprecated `ListT` and `ErrorT` -* Add instances for `Control.Monad.Trans.Accum` +* Add instances for `Control.Monad.Trans.Accum` and `Control.Monad.Trans.Select` 2.2.2 ----- diff --git a/Control/Monad/Reader/Class.hs b/Control/Monad/Reader/Class.hs index 4b163cd45c737bec5c3d7069444f3389c228927c..a1d52daa9b7f98e7649519cecb3a40c22d8fe1a3 100644 --- a/Control/Monad/Reader/Class.hs +++ b/Control/Monad/Reader/Class.hs @@ -61,6 +61,7 @@ import Control.Monad.Trans.Writer.Strict as Strict #if MIN_VERSION_transformers(0,5,3) import Control.Monad.Trans.Accum as Accum +import Control.Monad.Trans.Select as Select #endif #if MIN_VERSION_transformers(0,5,6) @@ -203,4 +204,18 @@ instance ask = lift ask local = Accum.mapAccumT . local reader = lift . reader + +-- | @since 2.3 +instance + ( MonadReader r' m +#if !MIN_VERSION_base(4,8,0) + , Functor m +#endif + ) => MonadReader r' (SelectT r m) where + ask = lift ask + -- there is no Select.liftLocal + local f m = SelectT $ \c -> do + r <- ask + local f (runSelectT m (local (const r) . c)) + reader = lift . reader #endif