simpoole-0.4.0: Simple pool
Safe HaskellNone
LanguageHaskell2010

Simpoole.Monad

Synopsis

Documentation

class MonadPool resource m where Source #

A pooled resource is available through m

Since: 0.3.0

Methods

withResource :: (resource -> m a) -> m a Source #

Grab a resource and do something with it.

Since: 0.3.0

Instances

Instances details
MonadPool resource m => MonadPool resource (CatchT m) Source #

Since: 0.4.0

Instance details

Defined in Simpoole.Monad.Class

Methods

withResource :: (resource -> CatchT m a) -> CatchT m a Source #

MonadPool resource m => MonadPool resource (IdentityT m) Source #

Since: 0.4.0

Instance details

Defined in Simpoole.Monad.Class

Methods

withResource :: (resource -> IdentityT m a) -> IdentityT m a Source #

(MonadPool resource m, MonadConc m) => MonadPool resource (IsConc m) Source #

Since: 0.4.0

Instance details

Defined in Simpoole.Monad.Class

Methods

withResource :: (resource -> IsConc m a) -> IsConc m a Source #

MonadPool resource m => MonadPool resource (ReaderT r m) Source #

Since: 0.3.0

Instance details

Defined in Simpoole.Monad.Class

Methods

withResource :: (resource -> ReaderT r m a) -> ReaderT r m a Source #

MonadPool resource m => MonadPool resource (WriterT w m) Source #

Since: 0.3.0

Instance details

Defined in Simpoole.Monad.Class

Methods

withResource :: (resource -> WriterT w m a) -> WriterT w m a Source #

MonadPool resource m => MonadPool resource (WriterT w m) Source #

Since: 0.3.0

Instance details

Defined in Simpoole.Monad.Class

Methods

withResource :: (resource -> WriterT w m a) -> WriterT w m a Source #

MonadPool resource m => MonadPool resource (StateT s m) Source #

Since: 0.3.0

Instance details

Defined in Simpoole.Monad.Class

Methods

withResource :: (resource -> StateT s m a) -> StateT s m a Source #

MonadPool resource m => MonadPool resource (StateT s m) Source #

Since: 0.3.0

Instance details

Defined in Simpoole.Monad.Class

Methods

withResource :: (resource -> StateT s m a) -> StateT s m a Source #

MonadMask m => MonadPool resource (PoolT resource m) Source #

Since: 0.3.0

Instance details

Defined in Simpoole.Monad.Internal

Methods

withResource :: (resource -> PoolT resource m a) -> PoolT resource m a Source #

(MonadPool resource f, MonadPool resource g) => MonadPool resource (Product f g) Source #

Since: 0.4.0

Instance details

Defined in Simpoole.Monad.Class

Methods

withResource :: (resource -> Product f g a) -> Product f g a Source #

MonadPool resource m => MonadPool resource (RWST r s w m) Source #

Since: 0.3.0

Instance details

Defined in Simpoole.Monad.Class

Methods

withResource :: (resource -> RWST r s w m a) -> RWST r s w m a Source #

MonadPool resource m => MonadPool resource (RWST r s w m) Source #

Since: 0.3.0

Instance details

Defined in Simpoole.Monad.Class

Methods

withResource :: (resource -> RWST r s w m a) -> RWST r s w m a Source #

data PoolT resource m a Source #

Monad transformer for operations on pools

This transformer can help you if you have problems with re-entrance (e.g. nested withResource calls).

withResource $ \x -> withResource $ \y -> ...

In the above example x and y are the same resource.

Note, this does not apply when spawning new threads in the outer withResource scope using MonadConc.

withResource $ \x -> async $ withResource $ \y -> ...

In the special case above, x and y are not the same resource because the closure given to async does not inherit the associated resource from the outer withResource closure.

Since: 0.3.0

Instances

Instances details
MonadWriter w m => MonadWriter w (PoolT resource m) Source #

Since: 0.3.0

Instance details

Defined in Simpoole.Monad.Internal

Methods

writer :: (a, w) -> PoolT resource m a #

tell :: w -> PoolT resource m () #

listen :: PoolT resource m a -> PoolT resource m (a, w) #

pass :: PoolT resource m (a, w -> w) -> PoolT resource m a #

MonadState s m => MonadState s (PoolT resource m) Source #

Since: 0.3.0

Instance details

Defined in Simpoole.Monad.Internal

Methods

get :: PoolT resource m s #

put :: s -> PoolT resource m () #

state :: (s -> (a, s)) -> PoolT resource m a #

MonadReader r m => MonadReader r (PoolT resource m) Source #

Since: 0.3.0

Instance details

Defined in Simpoole.Monad.Internal

Methods

ask :: PoolT resource m r #

local :: (r -> r) -> PoolT resource m a -> PoolT resource m a #

reader :: (r -> a) -> PoolT resource m a #

MonadError e m => MonadError e (PoolT resource m) Source #

Since: 0.3.0

Instance details

Defined in Simpoole.Monad.Internal

Methods

throwError :: e -> PoolT resource m a #

catchError :: PoolT resource m a -> (e -> PoolT resource m a) -> PoolT resource m a #

MonadMask m => MonadPool resource (PoolT resource m) Source #

Since: 0.3.0

Instance details

Defined in Simpoole.Monad.Internal

Methods

withResource :: (resource -> PoolT resource m a) -> PoolT resource m a Source #

MonadTrans (PoolT resource) Source #

Since: 0.3.0

Instance details

Defined in Simpoole.Monad.Internal

Methods

lift :: Monad m => m a -> PoolT resource m a #

Monad m => Monad (PoolT resource m) Source #

Since: 0.3.0

Instance details

Defined in Simpoole.Monad.Internal

Methods

(>>=) :: PoolT resource m a -> (a -> PoolT resource m b) -> PoolT resource m b #

(>>) :: PoolT resource m a -> PoolT resource m b -> PoolT resource m b #

return :: a -> PoolT resource m a #

Functor m => Functor (PoolT resource m) Source #

Since: 0.3.0

Instance details

Defined in Simpoole.Monad.Internal

Methods

fmap :: (a -> b) -> PoolT resource m a -> PoolT resource m b #

(<$) :: a -> PoolT resource m b -> PoolT resource m a #

MonadFail m => MonadFail (PoolT resource m) Source #

Since: 0.3.0

Instance details

Defined in Simpoole.Monad.Internal

Methods

fail :: String -> PoolT resource m a #

Applicative m => Applicative (PoolT resource m) Source #

Since: 0.3.0

Instance details

Defined in Simpoole.Monad.Internal

Methods

pure :: a -> PoolT resource m a #

(<*>) :: PoolT resource m (a -> b) -> PoolT resource m a -> PoolT resource m b #

liftA2 :: (a -> b -> c) -> PoolT resource m a -> PoolT resource m b -> PoolT resource m c #

(*>) :: PoolT resource m a -> PoolT resource m b -> PoolT resource m b #

(<*) :: PoolT resource m a -> PoolT resource m b -> PoolT resource m a #

MonadIO m => MonadIO (PoolT resource m) Source #

Since: 0.3.0

Instance details

Defined in Simpoole.Monad.Internal

Methods

liftIO :: IO a -> PoolT resource m a #

MonadConc m => MonadConc (PoolT resource m) Source #

Since: 0.3.0

Instance details

Defined in Simpoole.Monad.Internal

Associated Types

type STM (PoolT resource m) :: Type -> Type #

type MVar (PoolT resource m) :: Type -> Type #

type IORef (PoolT resource m) :: Type -> Type #

type Ticket (PoolT resource m) :: Type -> Type #

type ThreadId (PoolT resource m) #

Methods

forkWithUnmask :: ((forall a. PoolT resource m a -> PoolT resource m a) -> PoolT resource m ()) -> PoolT resource m (ThreadId (PoolT resource m)) #

forkWithUnmaskN :: String -> ((forall a. PoolT resource m a -> PoolT resource m a) -> PoolT resource m ()) -> PoolT resource m (ThreadId (PoolT resource m)) #

forkOnWithUnmask :: Int -> ((forall a. PoolT resource m a -> PoolT resource m a) -> PoolT resource m ()) -> PoolT resource m (ThreadId (PoolT resource m)) #

forkOnWithUnmaskN :: String -> Int -> ((forall a. PoolT resource m a -> PoolT resource m a) -> PoolT resource m ()) -> PoolT resource m (ThreadId (PoolT resource m)) #

forkOSWithUnmask :: ((forall a. PoolT resource m a -> PoolT resource m a) -> PoolT resource m ()) -> PoolT resource m (ThreadId (PoolT resource m)) #

forkOSWithUnmaskN :: String -> ((forall a. PoolT resource m a -> PoolT resource m a) -> PoolT resource m ()) -> PoolT resource m (ThreadId (PoolT resource m)) #

supportsBoundThreads :: PoolT resource m Bool #

isCurrentThreadBound :: PoolT resource m Bool #

getNumCapabilities :: PoolT resource m Int #

setNumCapabilities :: Int -> PoolT resource m () #

myThreadId :: PoolT resource m (ThreadId (PoolT resource m)) #

yield :: PoolT resource m () #

threadDelay :: Int -> PoolT resource m () #

newEmptyMVar :: PoolT resource m (MVar (PoolT resource m) a) #

newEmptyMVarN :: String -> PoolT resource m (MVar (PoolT resource m) a) #

putMVar :: MVar (PoolT resource m) a -> a -> PoolT resource m () #

tryPutMVar :: MVar (PoolT resource m) a -> a -> PoolT resource m Bool #

readMVar :: MVar (PoolT resource m) a -> PoolT resource m a #

tryReadMVar :: MVar (PoolT resource m) a -> PoolT resource m (Maybe a) #

takeMVar :: MVar (PoolT resource m) a -> PoolT resource m a #

tryTakeMVar :: MVar (PoolT resource m) a -> PoolT resource m (Maybe a) #

newIORef :: a -> PoolT resource m (IORef (PoolT resource m) a) #

newIORefN :: String -> a -> PoolT resource m (IORef (PoolT resource m) a) #

readIORef :: IORef (PoolT resource m) a -> PoolT resource m a #

atomicModifyIORef :: IORef (PoolT resource m) a -> (a -> (a, b)) -> PoolT resource m b #

writeIORef :: IORef (PoolT resource m) a -> a -> PoolT resource m () #

atomicWriteIORef :: IORef (PoolT resource m) a -> a -> PoolT resource m () #

readForCAS :: IORef (PoolT resource m) a -> PoolT resource m (Ticket (PoolT resource m) a) #

peekTicket' :: Proxy (PoolT resource m) -> Ticket (PoolT resource m) a -> a #

casIORef :: IORef (PoolT resource m) a -> Ticket (PoolT resource m) a -> a -> PoolT resource m (Bool, Ticket (PoolT resource m) a) #

modifyIORefCAS :: IORef (PoolT resource m) a -> (a -> (a, b)) -> PoolT resource m b #

modifyIORefCAS_ :: IORef (PoolT resource m) a -> (a -> a) -> PoolT resource m () #

atomically :: STM (PoolT resource m) a -> PoolT resource m a #

newTVarConc :: a -> PoolT resource m (TVar (STM (PoolT resource m)) a) #

readTVarConc :: TVar (STM (PoolT resource m)) a -> PoolT resource m a #

throwTo :: Exception e => ThreadId (PoolT resource m) -> e -> PoolT resource m () #

getMaskingState :: PoolT resource m MaskingState #

unsafeUnmask :: PoolT resource m a -> PoolT resource m a #

MonadThrow m => MonadThrow (PoolT resource m) Source #

Since: 0.3.0

Instance details

Defined in Simpoole.Monad.Internal

Methods

throwM :: Exception e => e -> PoolT resource m a #

MonadCatch m => MonadCatch (PoolT resource m) Source #

Since: 0.3.0

Instance details

Defined in Simpoole.Monad.Internal

Methods

catch :: Exception e => PoolT resource m a -> (e -> PoolT resource m a) -> PoolT resource m a #

MonadMask m => MonadMask (PoolT resource m) Source #

Since: 0.3.0

Instance details

Defined in Simpoole.Monad.Internal

Methods

mask :: ((forall a. PoolT resource m a -> PoolT resource m a) -> PoolT resource m b) -> PoolT resource m b #

uninterruptibleMask :: ((forall a. PoolT resource m a -> PoolT resource m a) -> PoolT resource m b) -> PoolT resource m b #

generalBracket :: PoolT resource m a -> (a -> ExitCase b -> PoolT resource m c) -> (a -> PoolT resource m b) -> PoolT resource m (b, c) #

type ThreadId (PoolT resource m) Source # 
Instance details

Defined in Simpoole.Monad.Internal

type ThreadId (PoolT resource m) = ThreadId m
type Ticket (PoolT resource m) Source # 
Instance details

Defined in Simpoole.Monad.Internal

type Ticket (PoolT resource m) = Ticket m
type IORef (PoolT resource m) Source # 
Instance details

Defined in Simpoole.Monad.Internal

type IORef (PoolT resource m) = IORef m
type MVar (PoolT resource m) Source # 
Instance details

Defined in Simpoole.Monad.Internal

type MVar (PoolT resource m) = MVar m
type STM (PoolT resource m) Source # 
Instance details

Defined in Simpoole.Monad.Internal

type STM (PoolT resource m) = STM m

runPoolT :: Pool m resource -> PoolT resource m a -> m a Source #

Run the monad transformer against the given pool.

Since: 0.3.0

hoistPoolT :: (m a -> m b) -> PoolT resource m a -> PoolT resource m b Source #

Lift an operation on the underlying functor.

Since: 0.3.0

metricsPoolT :: PoolT resource m (Metrics Natural) Source #

Retrieve the internal pool metrics.

See poolMetrics.

Since: 0.4.0