on dev help sign in
mmorph
65a930aEitan Chatav
squeal-postgresql/squeal-postgresql.cabal+1
@@ -42,6 +42,7 @@ library
42 , deepseq >= 1.4.3.0
42 , deepseq >= 1.4.3.0
43 , generics-sop >= 0.3.2.0
43 , generics-sop >= 0.3.2.0
44 , lifted-base >= 0.2.3.12
44 , lifted-base >= 0.2.3.12
45+ , mmorph >= 1.1.1
45 , monad-control >= 1.0.2.3
46 , monad-control >= 1.0.2.3
46 , mtl >= 2.2.2
47 , mtl >= 2.2.2
47 , network-ip >= 0.3.0.2
48 , network-ip >= 0.3.0.2
squeal-postgresql/src/Squeal/PostgreSQL/PQ.hs+8
@@ -64,6 +64,7 @@ module Squeal.PostgreSQL.PQ
64import Control.Exception.Lifted
64import Control.Exception.Lifted
65import Control.Monad.Base
65import Control.Monad.Base
66import Control.Monad.Except
66import Control.Monad.Except
67+import Control.Monad.Morph
67import Control.Monad.Trans.Control
68import Control.Monad.Trans.Control
68import Data.ByteString (ByteString)
69import Data.ByteString (ByteString)
69import Data.Foldable
70import Data.Foldable
@@ -475,11 +476,18 @@ instance Monad m => Monad (PQ schema schema m) where
475 return = pure
476 return = pure
476 (>>=) = flip pqBind
477 (>>=) = flip pqBind
477
478
479+instance MFunctor (PQ schema schema) where
480+ hoist f (PQ pq) = PQ (f . pq)
481+
478instance MonadTrans (PQ schema schema) where
482instance MonadTrans (PQ schema schema) where
479 lift m = PQ $ \ _conn -> do
483 lift m = PQ $ \ _conn -> do
480 x <- m
484 x <- m
481 return (K x)
485 return (K x)
482
486
487+instance MMonad (PQ schema schema) where
488+ embed f (PQ pq) = PQ $ \ conn -> do
489+ evalPQ (f (pq conn)) conn
490+
483instance MonadBase b m => MonadBase b (PQ schema schema m) where
491instance MonadBase b m => MonadBase b (PQ schema schema m) where
484 liftBase = lift . liftBase
492 liftBase = lift . liftBase
485
493