module Effectful.Zoo.Core.Error.Dynamic ( Error, catch, catch_, throw, trap, trap_, catchWithCallStack, catchWithCallStack_, trapWithCallStack, trapWithCallStack_, ) where import Effectful import Effectful.Error.Dynamic (Error) import Effectful.Error.Dynamic qualified as E import Effectful.Zoo.Core import HaskellWorks.Prelude catchWithCallStack :: forall e es a. () => HasCallStack => es <: Error e => Eff es a -> (CallStack -> e -> Eff es a) -> Eff es a catchWithCallStack :: forall e (es :: [Effect]) a. (HasCallStack, es <: Error e) => Eff es a -> (CallStack -> e -> Eff es a) -> Eff es a catchWithCallStack = Eff es a -> (CallStack -> e -> Eff es a) -> Eff es a forall e (es :: [Effect]) a. (HasCallStack, es <: Error e) => Eff es a -> (CallStack -> e -> Eff es a) -> Eff es a E.catchError catchWithCallStack_ :: forall e es a. () => HasCallStack => es <: Error e => Eff es a -> (CallStack -> Eff es a) -> Eff es a catchWithCallStack_ :: forall e (es :: [Effect]) a. (HasCallStack, es <: Error e) => Eff es a -> (CallStack -> Eff es a) -> Eff es a catchWithCallStack_ Eff es a f CallStack -> Eff es a h = forall e (es :: [Effect]) a. (HasCallStack, es <: Error e) => Eff es a -> (CallStack -> e -> Eff es a) -> Eff es a catchWithCallStack @e Eff es a f \CallStack cs e _ -> CallStack -> Eff es a h CallStack cs trapWithCallStack :: forall e es a. () => HasCallStack => es <: Error e => (CallStack -> e -> Eff es a) -> Eff es a -> Eff es a trapWithCallStack :: forall e (es :: [Effect]) a. (HasCallStack, es <: Error e) => (CallStack -> e -> Eff es a) -> Eff es a -> Eff es a trapWithCallStack = (Eff es a -> (CallStack -> e -> Eff es a) -> Eff es a) -> (CallStack -> e -> Eff es a) -> Eff es a -> Eff es a forall a b c. (a -> b -> c) -> b -> a -> c flip Eff es a -> (CallStack -> e -> Eff es a) -> Eff es a forall e (es :: [Effect]) a. (HasCallStack, es <: Error e) => Eff es a -> (CallStack -> e -> Eff es a) -> Eff es a catchWithCallStack trapWithCallStack_ :: forall e es a. () => HasCallStack => es <: Error e => (CallStack -> Eff es a) -> Eff es a -> Eff es a trapWithCallStack_ :: forall e (es :: [Effect]) a. (HasCallStack, es <: Error e) => (CallStack -> Eff es a) -> Eff es a -> Eff es a trapWithCallStack_ CallStack -> Eff es a h = forall e (es :: [Effect]) a. (HasCallStack, es <: Error e) => (CallStack -> e -> Eff es a) -> Eff es a -> Eff es a trapWithCallStack @e (Eff es a -> e -> Eff es a forall a b. a -> b -> a const (Eff es a -> e -> Eff es a) -> (CallStack -> Eff es a) -> CallStack -> e -> Eff es a forall b c a. (b -> c) -> (a -> b) -> a -> c . CallStack -> Eff es a h) catch :: forall e es a. () => HasCallStack => es <: Error e => Eff es a -> (e -> Eff es a) -> Eff es a catch :: forall e (es :: [Effect]) a. (HasCallStack, es <: Error e) => Eff es a -> (e -> Eff es a) -> Eff es a catch Eff es a action e -> Eff es a handler = Eff es a -> (CallStack -> e -> Eff es a) -> Eff es a forall e (es :: [Effect]) a. (HasCallStack, es <: Error e) => Eff es a -> (CallStack -> e -> Eff es a) -> Eff es a catchWithCallStack Eff es a action ((e -> Eff es a) -> CallStack -> e -> Eff es a forall a b. a -> b -> a const e -> Eff es a handler) catch_ :: forall e es a. () => HasCallStack => es <: Error e => Eff es a -> Eff es a -> Eff es a catch_ :: forall e (es :: [Effect]) a. (HasCallStack, es <: Error e) => Eff es a -> Eff es a -> Eff es a catch_ Eff es a action Eff es a handler = forall e (es :: [Effect]) a. (HasCallStack, es <: Error e) => Eff es a -> (e -> Eff es a) -> Eff es a catch @e Eff es a action (Eff es a -> e -> Eff es a forall a b. a -> b -> a const Eff es a handler) throw :: forall e es a. () => HasCallStack => es <: Error e => Show e => e -> Eff es a throw :: forall e (es :: [Effect]) a. (HasCallStack, es <: Error e, Show e) => e -> Eff es a throw = e -> Eff es a forall e (es :: [Effect]) a. (HasCallStack, es <: Error e, Show e) => e -> Eff es a E.throwError trap :: forall e es a. () => HasCallStack => es <: Error e => (e -> Eff es a) -> Eff es a -> Eff es a trap :: forall e (es :: [Effect]) a. (HasCallStack, es <: Error e) => (e -> Eff es a) -> Eff es a -> Eff es a trap = (Eff es a -> (e -> Eff es a) -> Eff es a) -> (e -> Eff es a) -> Eff es a -> Eff es a forall a b c. (a -> b -> c) -> b -> a -> c flip Eff es a -> (e -> Eff es a) -> Eff es a forall e (es :: [Effect]) a. (HasCallStack, es <: Error e) => Eff es a -> (e -> Eff es a) -> Eff es a catch trap_ :: forall e es a. () => HasCallStack => es <: Error e => Eff es a -> Eff es a -> Eff es a trap_ :: forall e (es :: [Effect]) a. (HasCallStack, es <: Error e) => Eff es a -> Eff es a -> Eff es a trap_ Eff es a handler = forall e (es :: [Effect]) a. (HasCallStack, es <: Error e) => (e -> Eff es a) -> Eff es a -> Eff es a trap @e (Eff es a -> e -> Eff es a forall a b. a -> b -> a const Eff es a handler)