@@ -84,6 +84,20 @@ import Squeal.PostgreSQL.Manipulation
84import Squeal.PostgreSQL.Query
84import Squeal.PostgreSQL.Query
85import Squeal.PostgreSQL.Schema
85import Squeal.PostgreSQL.Schema
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
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
87-- | A `Connection` consists of a `Database.PostgreSQL.LibPQ`
101-- | A `Connection` consists of a `Database.PostgreSQL.LibPQ`
88-- `Database.PastgreSQL.LibPQ.Connection` and a phantom `TablesType`
102-- `Database.PastgreSQL.LibPQ.Connection` and a phantom `TablesType`
89newtype Connection (schema :: TablesType) =
103newtype Connection (schema :: TablesType) =
@@ -390,6 +404,19 @@ instance MonadBase IO io => MonadPQ schema (PQ schema schema io) where
390 y <- liftBase $ pq conn
404 y <- liftBase $ pq conn
391 return (y, Connection conn)
405 return (y, Connection conn)
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)
393instance Monad m => Applicative (PQ schema schema m) where
420instance Monad m => Applicative (PQ schema schema m) where
394 pure x = PQ $ \ conn -> pure (x, conn)
421 pure x = PQ $ \ conn -> pure (x, conn)
395 (<*>) = pqAp
422 (<*>) = pqAp