catchError package:fused-effects

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)