content: {-# LANGUAGE NoImplicitPrelude #-}
  {-| Public API for the capataz library
  
      Capataz is a library that brings an OTP-like supervisor API to the Haskell
      concurrency toolset.
  
  -}
  module Control.Concurrent.Capataz
  (
  -- * Types
    Control.Concurrent.Capataz.Internal.Core.HasSupervisor (..)
  , Control.Concurrent.Capataz.Internal.Types.CallbackType (..)
  
  , Control.Concurrent.Capataz.Internal.Types.WorkerId
  , Control.Concurrent.Capataz.Internal.Types.WorkerName
  , Control.Concurrent.Capataz.Internal.Types.WorkerRestartStrategy (..)
  , Control.Concurrent.Capataz.Internal.Types.WorkerTerminationPolicy (..)
  , Control.Concurrent.Capataz.Internal.Types.WorkerOptions
  
  , Control.Concurrent.Capataz.Internal.Types.ProcessId
  , Control.Concurrent.Capataz.Internal.Types.ProcessSpec (..)
  , Control.Concurrent.Capataz.Internal.Types.ProcessType (..)
  , Control.Concurrent.Capataz.Internal.Types.ProcessTerminationOrder (..)
  , Control.Concurrent.Capataz.Internal.Types.ProcessError (..)
  
  , Control.Concurrent.Capataz.Internal.Types.SupervisorId
  , Control.Concurrent.Capataz.Internal.Types.SupervisorName
  , Control.Concurrent.Capataz.Internal.Types.Supervisor
  , Control.Concurrent.Capataz.Internal.Types.SupervisorRestartStrategy (..)
  , Control.Concurrent.Capataz.Internal.Types.SupervisorStatus (..)
  , Control.Concurrent.Capataz.Internal.Types.SupervisorOptions
  
  , Control.Concurrent.Capataz.Internal.Types.CapatazOptions
  
  , Control.Concurrent.Capataz.Internal.Types.Capataz
  
  -- * Default Options for Capataz Processes
  , Control.Concurrent.Capataz.Internal.Types.buildSupervisorOptions
  , Control.Concurrent.Capataz.Internal.Types.buildSupervisorOptionsWithDefaults
  , Control.Concurrent.Capataz.Internal.Types.buildWorkerOptions
  , Control.Concurrent.Capataz.Internal.Types.buildWorkerOptions1
  , Control.Concurrent.Capataz.Internal.Types.buildWorkerOptionsWithDefaults
  , Control.Concurrent.Capataz.Internal.Types.supervisorSpec
  , Control.Concurrent.Capataz.Internal.Types.supervisorSpecWithDefaults
  , Control.Concurrent.Capataz.Internal.Types.workerSpec
  , Control.Concurrent.Capataz.Internal.Types.workerSpec1
  , Control.Concurrent.Capataz.Internal.Types.workerSpecWithDefaults
  
  -- * Lenses to modify Option Records
  , Control.Concurrent.Capataz.Lens.onSystemEventL
  , Control.Concurrent.Capataz.Lens.supervisorIntensityL
  , Control.Concurrent.Capataz.Lens.supervisorPeriodSecondsL
  , Control.Concurrent.Capataz.Lens.supervisorRestartStrategyL
  , Control.Concurrent.Capataz.Lens.supervisorProcessSpecListL
  , Control.Concurrent.Capataz.Lens.supervisorProcessTerminationOrderL
  , Control.Concurrent.Capataz.Lens.supervisorOnIntensityReachedL
  , Control.Concurrent.Capataz.Lens.supervisorOnFailureL
  , Control.Concurrent.Capataz.Lens.workerOnFailureL
  , Control.Concurrent.Capataz.Lens.workerOnCompletionL
  , Control.Concurrent.Capataz.Lens.workerOnTerminationL
  , Control.Concurrent.Capataz.Lens.workerTerminationPolicyL
  , Control.Concurrent.Capataz.Lens.workerRestartStrategyL
  
  -- * Core functionality
  , Control.Concurrent.Capataz.Internal.Core.forkWorker
  , Control.Concurrent.Capataz.Internal.Core.forkSupervisor
  , Control.Concurrent.Capataz.Internal.Core.forkCapataz
  , Control.Concurrent.Capataz.Internal.Core.terminateCapataz
  , Control.Concurrent.Capataz.Internal.Core.terminateCapataz_
  , Control.Concurrent.Capataz.Internal.Core.terminateProcess
  
  -- * Utility functions
  , Control.Concurrent.Capataz.Internal.Core.joinCapatazThread
  , Control.Concurrent.Capataz.Internal.Core.getSupervisorProcessId
  , Control.Concurrent.Capataz.Internal.Core.getSupervisorAsync
  , Control.Concurrent.Capataz.Internal.Core.getCapatazTeardown
  
  -- * Teardown (re-exported)
  , Control.Teardown.TeardownResult
  
  -- * Lens (re-exported)
  , (&)
  , Control.Concurrent.Capataz.Lens.set
  )
  where
  
  import qualified Control.Concurrent.Capataz.Internal.Core
  import qualified Control.Concurrent.Capataz.Internal.Types
  import           Control.Concurrent.Capataz.Lens           ((&))
  import qualified Control.Concurrent.Capataz.Lens
  import qualified Control.Teardown
  