on dev help sign in
transformer instances
commit516e0ebefd4c11be35c437fe3c5955cfd333fee1 authorEitan Chatav <eitan.chatav@gmail.com> dateMon 28 Aug 2017, 10:47 (9 years ago) parent9788371
1 file changed+27
squeal-postgresql/src/Squeal/PostgreSQL/PQ.hs+27
squeal-postgresql/src/Squeal/PostgreSQL/PQ.hs+27
@@ -84,6 +84,20 @@ import Squeal.PostgreSQL.Manipulation
8484import Squeal.PostgreSQL.Query
8585import Squeal.PostgreSQL.Schema
8686
87+-- For `MonadPQ` transformer instances
88+import Control.Monad.Trans.Identity
89+import Control.Monad.Trans.Reader
90+import Control.Monad.Trans.Maybe
91+import Control.Monad.Trans.Cont
92+import Control.Monad.Trans.List
93+
94+import qualified Control.Monad.Trans.State.Lazy as Lazy
95+import qualified Control.Monad.Trans.State.Strict as Strict
96+import qualified Control.Monad.Trans.Writer.Lazy as Lazy
97+import qualified Control.Monad.Trans.Writer.Strict as Strict
98+import qualified Control.Monad.Trans.RWS.Lazy as Lazy
99+import qualified Control.Monad.Trans.RWS.Strict as Strict
100+
87101-- | A `Connection` consists of a `Database.PostgreSQL.LibPQ`
88102-- `Database.PastgreSQL.LibPQ.Connection` and a phantom `TablesType`
89103newtype Connection (schema :: TablesType) =
@@ -390,6 +404,19 @@ instance MonadBase IO io => MonadPQ schema (PQ schema schema io) where
390404 y <- liftBase $ pq conn
391405 return (y, Connection conn)
392406
407+instance MonadPQ schema m => MonadPQ schema (IdentityT m)
408+instance MonadPQ schema m => MonadPQ schema (ReaderT r m)
409+instance MonadPQ schema m => MonadPQ schema (Strict.StateT s m)
410+instance MonadPQ schema m => MonadPQ schema (Lazy.StateT s m)
411+instance (Monoid w, MonadPQ schema m) => MonadPQ schema (Strict.WriterT w m)
412+instance (Monoid w, MonadPQ schema m) => MonadPQ schema (Lazy.WriterT w m)
413+instance MonadPQ schema m => MonadPQ schema (MaybeT m)
414+instance MonadPQ schema m => MonadPQ schema (ExceptT e m)
415+instance (Monoid w, MonadPQ schema m) => MonadPQ schema (Strict.RWST r w s m)
416+instance (Monoid w, MonadPQ schema m) => MonadPQ schema (Lazy.RWST r w s m)
417+instance MonadPQ schema m => MonadPQ schema (ContT r m)
418+instance MonadPQ schema m => MonadPQ schema (ListT m)
419+
393420instance Monad m => Applicative (PQ schema schema m) where
394421 pure x = PQ $ \ conn -> pure (x, conn)
395422 (<*>) = pqAp