threads-supervisor-1.0.4.0: src/Control/Concurrent/Supervisor/Bounded.hs
{-|
This module offers a `Bounded` supervisor variant,
where `SupervisionEvent`(s) are written on a `TBQueue`,
and simply discarded if the queue is full.
-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE DeriveDataTypeable #-}
module Control.Concurrent.Supervisor.Bounded
( SupervisorSpec
, Supervisor
, Child
, newSupervisorSpec
, newSupervisorSpecBounded
, newSupervisor
, module T
) where
import Control.Concurrent.Supervisor.Types as T hiding (newSupervisor, newSupervisorSpec)
import qualified Control.Concurrent.Supervisor.Types as Types
import Control.Concurrent.STM
type SupervisorSpec = Types.SupervisorSpec0 TBQueue
type Supervisor = Types.Supervisor0 TBQueue
--------------------------------------------------------------------------------
type Child = Types.Child_ TBQueue
--------------------------------------------------------------------------------
-- | Creates a new 'SupervisorSpec'. The reason it doesn't return a
-- 'Supervisor' is to force you to call 'supervise' explicitly, in order to start the
-- supervisor thread.
newSupervisorSpec :: IO SupervisorSpec
newSupervisorSpec = Types.newSupervisorSpec defaultEventQueueSize
--------------------------------------------------------------------------------
-- | Like 'newSupervisorSpec', but give the user control over the size of the
-- event queue.
newSupervisorSpecBounded :: Int -> IO SupervisorSpec
newSupervisorSpecBounded = Types.newSupervisorSpec
--------------------------------------------------------------------------------
-- | The default size of the queue where `SupervisionEvent`(s) are written.
defaultEventQueueSize :: Int
defaultEventQueueSize = 10000
-- $supervise
--------------------------------------------------------------------------------
newSupervisor :: SupervisorSpec -> IO Supervisor
newSupervisor spec = Types.newSupervisor spec