HORIZON HASKELLDocslts/ghc-10.0.x8c2f8e82026-10-19Search names, modules, packages, or :: a typeCtrl K

GHC 10.0.0.20260917 · lts/ghc-10.0.x · 8c2f8e8 · 2026-10-19

Modulefused-effects-1.1.2.7Haskell2010

Control.Effect.Catch

An effect modelling catchable failure when used with Throw.

Predefined carriers:

  • 2 types
  • 1 class
  • 2 values

Catch effect

2 declarations
datadata Catch e (m :: Type -> Type) k where
#

Catch effects can be used alongside Throw to provide recoverable exceptions.

Constructors

Instances4Algebra
valuecatchError :: Has (Catch e) sig m => m a -> (e -> m a) -> m a
#

Run a computation which can throw errors with a handler to run on error.

Errors thrown by the handler will escape up to the nearest enclosing catchError (if any). Note that this effect does not handle errors thrown from impure contexts such as IO, nor will it handle exceptions thrown from pure code. If you need to handle IO-based errors, consider if fused-effects-exceptions fits your use case; if not, use liftIO with try or use catch from outside the effect invocation.

runError (throwError e catchError f) = runError (f e)

Re-exports

3 declarations
classclass Monad m => Algebra (sig :: (Type -> Type) -> Type -> Type) (m :: Type -> Type) | m -> sig where
#

The class of carriers (results) for algebras (effect handlers) over signatures (effects), whose actions are given by the alg method.

Instances53Algebra, …
typetype Has (eff :: (Type -> Type) -> Type -> Type) (sig :: (Type -> Type) -> Type -> Type) (m :: Type -> Type) = (Members eff sig, Algebra sig m)
#

m is a carrier for sig containing eff.

Note that if eff is a sum, it will be decomposed into multiple Member constraints. While this technically allows one to combine multiple unrelated effects into a single Has constraint, doing so has two significant drawbacks:

  1. Due to a problem with recursive type families, this can lead to significantly slower compiles.

  2. It defeats ghc’s warnings for redundant constraints, and thus can lead to a proliferation of redundant constraints as code is changed.

valuerun :: Identity a -> a
#

Run an action exhausted of effects to produce its final result value.