{-# OPTIONS_HADDOCK not-home #-}
module Control.Effect.Type.Fail where

-- | An effect corresponding to the 'Control.Monad.Fail.MonadFail' type class.

--

-- 'Control.Effect.Effly.Effly''s 'Control.Monad.Fail.MonadFail' instance is based

-- on this effect; by having access to 'Fail', you're able to invoke

-- handle pattern-match failure automatically inside of effect handlers.

--

-- Each 'Fail' interpreter's associated carrier

-- has an 'Control.Monad.Fail.MonadFail' instance based on

-- how it interprets 'Fail'. This means you can use

-- an 'Fail' interpreter to locally gain access to an 'Control.Monad.Fail.MonadFail'

-- instance inside of application code.

newtype Fail (m :: * -> *) (a :: *) where
  Fail :: String -> Fail m a