grisette-0.1.0.0: src/Grisette/Lib/Control/Monad/Except.hs
{-# LANGUAGE Trustworthy #-}
-- |
-- Module : Grisette.Lib.Control.Monad.Except
-- Copyright : (c) Sirui Lu 2021-2023
-- License : BSD-3-Clause (see the LICENSE file)
--
-- Maintainer : siruilu@cs.washington.edu
-- Stability : Experimental
-- Portability : GHC only
module Grisette.Lib.Control.Monad.Except
( -- * mrg* variants for operations in "Control.Monad.Except"
mrgThrowError,
mrgCatchError,
)
where
import Control.Monad.Except
import Grisette.Core.Control.Monad.Union
import Grisette.Core.Data.Class.Bool
import Grisette.Core.Data.Class.Mergeable
import Grisette.Core.Data.Class.SimpleMergeable
-- | 'throwError' with 'MergingStrategy' knowledge propagation.
mrgThrowError :: (MonadError e m, MonadUnion m, Mergeable a) => e -> m a
mrgThrowError = merge . throwError
{-# INLINE mrgThrowError #-}
-- | 'catchError' with 'MergingStrategy' knowledge propagation.
mrgCatchError ::
(MonadError e m, MonadUnion m, Mergeable a) =>
m a ->
(e -> m a) ->
m a
mrgCatchError v handler = merge $ v `catchError` (merge . handler)
{-# INLINE mrgCatchError #-}