@@ -0,0 +1,61 @@
5+ , MultiParamTypeClasses
7+ , UndecidableInstances
10+module Squeal.PostgreSQL.Pool where
12+import Control.Monad.Base
13+import Control.Monad.Trans
14+import Control.Monad.Trans.Control
17+import Squeal.PostgreSQL.PQ
19+newtype PoolPQ schema m x = PoolPQ { runPoolPQ :: Pool (Connection schema) -> m x }
22+instance Monad m => Applicative (PoolPQ schema m) where
23+ pure x = PoolPQ $ \ _ -> pure x
24+ PoolPQ f <*> PoolPQ x = PoolPQ $ \ pool -> do
29+instance Monad m => Monad (PoolPQ schema m) where
31+ PoolPQ x >>= f = PoolPQ $ \ pool -> do
33+ runPoolPQ (f x') pool
35+instance MonadTrans (PoolPQ schema) where
36+ lift m = PoolPQ $ \ _pool -> m
38+instance MonadBase b m => MonadBase b (PoolPQ schema m) where
39+ liftBase = lift . liftBase
41+instance MonadBaseControl IO io => MonadPQ schema (PoolPQ schema io) where
42+ manipulateParams manipulation params = PoolPQ $ \ pool -> do
43+ withResource pool $ \ conn -> do
44+ (result, _ :: Connection schema) <- flip runPQ conn $
45+ manipulateParams manipulation params
47+ traversePrepared manipulation params = PoolPQ $ \ pool ->
48+ withResource pool $ \ conn -> do
49+ (result, _ :: Connection schema) <- flip runPQ conn $
50+ traversePrepared manipulation params
52+ traversePrepared_ manipulation params = PoolPQ $ \ pool -> do
53+ withResource pool $ \ conn -> do
54+ (_, _ :: Connection schema) <- flip runPQ conn $
55+ traversePrepared_ manipulation params
57+ liftPQ m = PoolPQ $ \ pool ->
58+ withResource pool $ \ conn -> do
59+ (result, _ :: Connection schema) <- flip runPQ conn $