Safe Haskell | None |
---|---|
Language | Haskell2010 |
Simpoole.Monad
Synopsis
- class MonadPool resource m where
- withResource :: (resource -> m a) -> m a
- data PoolT resource m a
- runPoolT :: Pool m resource -> PoolT resource m a -> m a
- hoistPoolT :: (m a -> m b) -> PoolT resource m a -> PoolT resource m b
- metricsPoolT :: PoolT resource m (Metrics Natural)
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
MonadPool resource m => MonadPool resource (CatchT m) Source # | Since: 0.4.0 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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
MonadWriter w m => MonadWriter w (PoolT resource m) Source # | Since: 0.3.0 |
MonadState s m => MonadState s (PoolT resource m) Source # | Since: 0.3.0 |
MonadReader r m => MonadReader r (PoolT resource m) Source # | Since: 0.3.0 |
MonadError e m => MonadError e (PoolT resource m) Source # | Since: 0.3.0 |
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 |
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 |
Defined in Simpoole.Monad.Internal | |
Monad m => Monad (PoolT resource m) Source # | Since: 0.3.0 |
Functor m => Functor (PoolT resource m) Source # | Since: 0.3.0 |
MonadFail m => MonadFail (PoolT resource m) Source # | Since: 0.3.0 |
Defined in Simpoole.Monad.Internal | |
Applicative m => Applicative (PoolT resource m) Source # | Since: 0.3.0 |
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 |
Defined in Simpoole.Monad.Internal | |
MonadConc m => MonadConc (PoolT resource m) Source # | Since: 0.3.0 |
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 # 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 |
Defined in Simpoole.Monad.Internal | |
MonadCatch m => MonadCatch (PoolT resource m) Source # | Since: 0.3.0 |
MonadMask m => MonadMask (PoolT resource m) Source # | Since: 0.3.0 |
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 # | |
Defined in Simpoole.Monad.Internal | |
type Ticket (PoolT resource m) Source # | |
Defined in Simpoole.Monad.Internal | |
type IORef (PoolT resource m) Source # | |
Defined in Simpoole.Monad.Internal | |
type MVar (PoolT resource m) Source # | |
Defined in Simpoole.Monad.Internal | |
type STM (PoolT resource m) Source # | |
Defined in Simpoole.Monad.Internal |
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