module Foundation.Exception ( finally , try , SomeException ) where import Basement.Imports import Control.Exception (SomeException) import Foundation.Monad.Exception finally :: MonadBracket m => m a -> m b -> m a finally :: forall (m :: * -> *) a b. MonadBracket m => m a -> m b -> m a finally m a f m b g = forall (m :: * -> *) a b ignored1 ignored2. MonadBracket m => m a -> (a -> b -> m ignored1) -> (a -> SomeException -> m ignored2) -> (a -> m b) -> m b generalBracket (forall (m :: * -> *) a. Monad m => a -> m a return ()) (\() a a -> m b g forall (m :: * -> *) a b. Monad m => m a -> m b -> m b >> forall (m :: * -> *) a. Monad m => a -> m a return a a) (\() SomeException _ -> m b g) (forall a b. a -> b -> a const m a f) try :: (MonadCatch m, Exception e) => m a -> m (Either e a) try :: forall (m :: * -> *) e a. (MonadCatch m, Exception e) => m a -> m (Either e a) try m a a = forall (m :: * -> *) e a. (MonadCatch m, Exception e) => m a -> (e -> m a) -> m a catch (m a a forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b >>= \ a v -> forall (m :: * -> *) a. Monad m => a -> m a return (forall a b. b -> Either a b Right a v)) (\e e -> forall (m :: * -> *) a. Monad m => a -> m a return (forall a b. a -> Either a b Left e e))