-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/
-- | A high-performance striped resource pooling implementation
--
-- A high-performance striped pooling abstraction for managing
-- flexibly-sized collections of resources such as database connections.
@package resource-pool
@version 0.2.1.0
-- | A high-performance striped pooling abstraction for managing
-- flexibly-sized collections of resources such as database connections.
--
-- "Striped" means that a single Pool consists of several
-- sub-pools, each managed independently. A stripe size of 1 is fine for
-- many applications, and probably what you should choose by default.
-- Larger stripe sizes will lead to reduced contention in
-- high-performance multicore applications, at a trade-off of causing the
-- maximum number of simultaneous resources in use to grow.
module Data.Pool
data Pool a
-- | A single striped pool.
data LocalPool a
createPool :: IO a -> (a -> IO ()) -> Int -> NominalDiffTime -> Int -> IO (Pool a)
-- | Temporarily take a resource from a Pool, perform an action with
-- it, and return it to the pool afterwards.
--
--
-- - If the pool has an idle resource available, it is used
-- immediately.
-- - Otherwise, if the maximum number of resources has not yet been
-- reached, a new resource is created and used.
-- - If the maximum number of resources has been reached, this function
-- blocks until a resource becomes available.
--
--
-- If the action throws an exception of any type, the resource is
-- destroyed, and not returned to the pool.
--
-- It probably goes without saying that you should never manually destroy
-- a pooled resource, as doing so will almost certainly cause a
-- subsequent user (who expects the resource to be valid) to throw an
-- exception.
withResource :: MonadBaseControl IO m => Pool a -> (a -> m b) -> m b
-- | Take a resource from the pool, following the same results as
-- withResource. Note that this function should be used with
-- caution, as improper exception handling can lead to leaked resources.
--
-- This function returns both a resource and the LocalPool it
-- came from so that it may either be destroyed (via
-- destroyResource) or returned to the pool (via
-- putResource).
takeResource :: Pool a -> IO (a, LocalPool a)
-- | Destroy a resource. Note that this will ignore any exceptions in the
-- destroy function.
destroyResource :: Pool a -> LocalPool a -> a -> IO ()
-- | Return a resource to the given LocalPool.
putResource :: LocalPool a -> a -> IO ()
instance Show (Pool a)