module Control.Monad.Trans.Has.Except
  ( module Control.Monad.Trans.Has.Except
  , module X
  ) where

import "transformers" Control.Monad.Trans.Except
  qualified as Except
import "transformers" Control.Monad.Trans.Except
  as X
  (ExceptT (..))

import "this" Control.Monad.Trans.Has
import qualified Control.Monad.Trans.Except as Control.Monad.Trans.Has

type HasExcept e m = Has (ExceptT e) m

throw :: HasExcept e m => e -> m ()
throw :: e -> m ()
throw e
e = (forall (n :: * -> *). Monad n => ExceptT e n ()) -> m ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
Has t m =>
(forall (n :: * -> *). Monad n => t n a) -> m a
liftH ((forall (n :: * -> *). Monad n => ExceptT e n ()) -> m ())
-> (forall (n :: * -> *). Monad n => ExceptT e n ()) -> m ()
forall a b. (a -> b) -> a -> b
$ n (Either e ()) -> ExceptT e n ()
forall e (m :: * -> *) a. m (Either e a) -> ExceptT e m a
ExceptT (n (Either e ()) -> ExceptT e n ())
-> n (Either e ()) -> ExceptT e n ()
forall a b. (a -> b) -> a -> b
$ Either e () -> n (Either e ())
forall (m :: * -> *) a. Monad m => a -> m a
return (Either e () -> n (Either e ())) -> Either e () -> n (Either e ())
forall a b. (a -> b) -> a -> b
$ e -> Either e ()
forall a b. a -> Either a b
Left e
e