pool-0.1.1: Thread-safe resource pools.

Data.Pool

Contents

Synopsis

Creation

data Pool a Source

createPoolSource

Arguments

:: MonadControlIO m 
=> IO a

new resource creator

-> (a -> IO ())

resource deallocator

-> Int

maximum number of resources to allow in pool

-> (Pool a -> m b)

inner function to run with the pool

-> m b 

Create a new pool without any resource alive checking.

createPoolCheckAliveSource

Arguments

:: MonadControlIO m 
=> IO a

new resource creator

-> (a -> IO ())

resource deallocator

-> Int

maximum number of resource to allow in pool

-> (Pool a -> m b)

inner function to run with the pool

-> (a -> IO Bool)

is the resource alive?

-> m b 

Create a new pool, including a function to check if a resource is still alive. Stale resources will automatically be removed from the pool.

Usage

withPool :: MonadControlIO m => Pool a -> (a -> m b) -> m (Maybe b)Source

Attempt to run the given action with a resource from the given Pool. Returns Nothing if no resource was available.

withPool' :: MonadControlIO m => Pool a -> (a -> m b) -> m bSource

This function throws a PoolExhaustedException when no resources are available. See withPoolAllocate to avoid this.

withPoolAllocate :: MonadControlIO m => Pool a -> (a -> m b) -> m bSource

Same as withPool', but instead of throwing a PoolExhaustedException when there the maximum number of resources are created and allocated, it allocates a new resource, passes it to the subprocess and then frees it.

Diagnostics