effectful-core-1.0.0.0: src/Effectful/Fail.hs
-- | Provider of the 'MonadFail' instance for 'Eff'.
module Effectful.Fail
( -- * Effect
Fail(..)
-- ** Handlers
, runFail
, runFailIO
) where
import Effectful
import Effectful.Dispatch.Dynamic
import Effectful.Error.Static
import Effectful.Internal.Monad (Fail(..))
-- | Run the 'Fail' effect via 'Error'.
runFail :: Eff (Fail : es) a -> Eff es (Either String a)
runFail = reinterpret runErrorNoCallStack $ \_ -> \case
Fail msg -> throwError msg
-- | Run the 'Fail' effect via the 'MonadFail' instance for 'IO'.
runFailIO :: IOE :> es => Eff (Fail : es) a -> Eff es a
runFailIO = interpret $ \_ -> \case
Fail msg -> liftIO $ fail msg