packages feed

util-exception-0.1.0.0: Util/Exception.hs

{-# LANGUAGE ExistentialQuantification #-}

module Util.Exception where

import Control.Exception.Lifted
import Control.Monad
import Control.Monad.Trans.Control
import Data.Monoid (Alt (..))
import Util

handleJusts :: MonadBaseControl IO m => [ExceptionPredicate b] -> (b -> m a) -> m a -> m a
handleJusts = handleJust . fmap getAlt . foldMapA (fmap Alt . \ (ExceptionPredicate f) -> fromException >=> f)

data ExceptionPredicate b = ∀ e . Exception e => ExceptionPredicate (e -> Maybe b)