@@ -64,6 +64,7 @@ module Squeal.PostgreSQL.PQ
6464import Control.Exception.Lifted
6565import Control.Monad.Base
6666import Control.Monad.Except
67+import Control.Monad.Morph
6768import Control.Monad.Trans.Control
6869import Data.ByteString (ByteString)
6970import Data.Foldable
@@ -475,11 +476,18 @@ instance Monad m => Monad (PQ schema schema m) where
475476 return = pure
476477 (>>=) = flip pqBind
477478
479+instance MFunctor (PQ schema schema) where
480+ hoist f (PQ pq) = PQ (f . pq)
481+
478482instance MonadTrans (PQ schema schema) where
479483 lift m = PQ $ \ _conn -> do
480484 x <- m
481485 return (K x)
482486
487+instance MMonad (PQ schema schema) where
488+ embed f (PQ pq) = PQ $ \ conn -> do
489+ evalPQ (f (pq conn)) conn
490+
483491instance MonadBase b m => MonadBase b (PQ schema schema m) where
484492 liftBase = lift . liftBase
485493