module Ribosome.Control.Exception where

import Control.Exception.Lifted (IOException, catch, try)

tryIO ::
  MonadBaseControl IO m =>
  m a ->
  m (Either IOException a)
tryIO :: m a -> m (Either IOException a)
tryIO =
  m a -> m (Either IOException a)
forall (m :: * -> *) e a.
(MonadBaseControl IO m, Exception e) =>
m a -> m (Either e a)
try

tryAny ::
  MonadBaseControl IO m =>
  m a ->
  m (Either SomeException a)
tryAny :: m a -> m (Either SomeException a)
tryAny =
  m a -> m (Either SomeException a)
forall (m :: * -> *) e a.
(MonadBaseControl IO m, Exception e) =>
m a -> m (Either e a)
try

catchAny ::
  MonadBaseControl IO m =>
  (SomeException -> m a) ->
  m a ->
  m a
catchAny :: (SomeException -> m a) -> m a -> m a
catchAny =
  (m a -> (SomeException -> m a) -> m a)
-> (SomeException -> m a) -> m a -> m a
forall a b c. (a -> b -> c) -> b -> a -> c
flip m a -> (SomeException -> m a) -> m a
forall (m :: * -> *) e a.
(MonadBaseControl IO m, Exception e) =>
m a -> (e -> m a) -> m a
catch

catchAnyAs ::
  MonadBaseControl IO m =>
  a ->
  m a ->
  m a
catchAnyAs :: a -> m a -> m a
catchAnyAs =
  (SomeException -> m a) -> m a -> m a
forall (m :: * -> *) a.
MonadBaseControl IO m =>
(SomeException -> m a) -> m a -> m a
catchAny ((SomeException -> m a) -> m a -> m a)
-> (a -> SomeException -> m a) -> a -> m a -> m a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. m a -> SomeException -> m a
forall a b. a -> b -> a
const (m a -> SomeException -> m a)
-> (a -> m a) -> a -> SomeException -> m a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return