{-# LANGUAGE ConstraintKinds  #-}
{-# LANGUAGE FlexibleContexts #-}

module Control.Monad.Rescue.Constraint
  ( Handles
  , MonadRescue
  ) where

import           Control.Monad.Raise.Class
import           Control.Monad.Rescue.Class

import           Data.WorldPeace

-- | Express the ability to 'handle' / eliminate an exception case
type Handles err n m
  =  ( ElemRemove       err (Errors n)
     , Contains (Remove err (Errors n)) (Errors m)
     )

-- | Rescue from the existing context only
--
-- Note: cannot 'handle' (elimininate) exceptions
type MonadRescue m = MonadRescueFrom m m