From 91c98eeabb2eb5144619d7514bafa702073e15ec Mon Sep 17 00:00:00 2001
From: chessai <chessai1996@gmail.com>
Date: Sun, 12 Jul 2020 19:58:20 -0700
Subject: [PATCH] add instances for SelectT

---
 CHANGELOG.markdown            |  2 +-
 Control/Monad/Reader/Class.hs | 15 +++++++++++++++
 2 files changed, 16 insertions(+), 1 deletion(-)

diff --git a/CHANGELOG.markdown b/CHANGELOG.markdown
index 19b736b..4089f09 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 4b163cd..a1d52da 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
-- 
GitLab