{- | An effect modelling catchable failure with a polymorphic error type, the combination of 'Throw' and 'Catch'.

This effect is similar to the traditional @MonadError@ typeclass, though it allows the presence of multiple @Error@ effects in a given effect stack. It offers precise exception handling, rather than the dynamic exception hierarchy provided by the @exceptions@ package. The @fused-effects-exceptions@ package may be more suitable for handling dynamic/impure effect handling.

Predefined carriers:

* "Control.Carrier.Error.Church".
* "Control.Carrier.Error.Either".
* "Control.Monad.Trans.Except".
* If 'Error' @e@ is the last effect in a stack, it can be interpreted directly to an 'Either' @e@.

@since 0.1.0.0
-}

module Control.Effect.Error
( -- * Error effects
  Error
, module Control.Effect.Throw
, module Control.Effect.Catch
) where

import Control.Effect.Catch
import Control.Effect.Error.Internal (Error)
import Control.Effect.Throw