content: module Control.Effect
    ( -- * Core class
      Carrier(Derivs)
    , Effect
    , RepresentationalEff
  
      -- * Effect membership
    , Eff
    , Effs
    , Bundle
    , Member
  
      -- * Sending actions of effects
    , send
  
      -- * Running final monad
    , run
  
    , runM
  
      -- * Integrating external monads
    , Embed(..)
    , embed
  
      -- * Effect interpretation
    , interpretSimple
    , SimpleInterpreterFor
  
    , interpretViaHandler
    , Handler(..)
  
    , interpret
    , InterpreterFor
  
    , EffHandler
  
      -- * Effect reinterpretation
    , reinterpretSimple
    , reinterpretViaHandler
    , reinterpret
  
      -- * Threading constraints
    , Threaders
    , ReaderThreads
  
      -- * Effect Introduction
    , intro1
    , intro
    , introUnder1
    , introUnder
    , introUnderMany
    , HeadEff
    , HeadEffs
  
      -- * Combining effect carriers
    , CompositionC
    , runComposition
  
      -- * Other utilities
    , Effly(..)
    , subsume
  
      -- * Reexports from other modules
    , MonadBase(..)
    , MonadTrans(..)
  
      -- * Carriers and other misc. types
    , RunC
    , RunMC
    , InterpretSimpleC
    , InterpretC
    , InterpretReifiedC
    , ReifiesHandler
    , ViaReifiedH
    , ReinterpretSimpleC
    , ReinterpretC
    , ReinterpretReifiedC
    , IntroConsistent
    , IntroC
    , IntroTopC
    , IntroUnderC
    , IntroUnderManyC
    , KnownList
    , SubsumeC
    ) where
  
  import Control.Effect.Internal
  import Control.Effect.Internal.Effly
  import Control.Effect.Internal.KnownList
  import Control.Effect.Internal.Membership
  import Control.Effect.Internal.Union
  import Control.Effect.Embed
  import Control.Effect.Carrier.Internal.Compose
  import Control.Effect.Carrier.Internal.Intro
  import Control.Effect.Carrier.Internal.Interpret
  import Control.Monad.Base
  import Control.Monad.Trans
  
  -- | A useful type synonym for the type of 'interpret' provided a handler
  --
  -- @m@ is left polymorphic so that you may place @'Eff'/s@ constraints on it.
  type InterpreterFor e m =
       forall x
     . InterpretReifiedC e m x
    -> m x
  
  -- | A useful type synonym for the type of 'interpretSimple' provided a handler
  --
  -- @m@ is left polymorphic so that you may place @'Eff'/s@ constraints on it.
  type SimpleInterpreterFor e m =
       forall x p
     . Threaders '[ReaderThreads] m p
    => InterpretSimpleC e m x
    -> m x
  