{-# options_haddock prune #-}

-- |Description: The 'Stop' effect.
module Polysemy.Resume.Effect.Stop where

-- |An effect similar to 'Polysemy.Error.Error' without the ability to be caught.
-- Used to signal that an error is supposed to be expected by dependent programs.
--
-- @
-- interpretStopper ::
--   Member (Stop Boom) r =>
--   InterpreterFor Stopper r
-- interpretStopper =
--   interpret \\case
--     StopBang -> stop (Bang 13)
--     StopBoom -> stop (Boom "ouch")
-- @
data Stop e :: Effect where
  -- |Abort a computation with an error value.
  Stop :: e -> Stop e m a

makeSem ''Stop