{-# LANGUAGE DeriveFunctor, KindSignatures #-}
module Control.Effect.Fail.Internal
( Fail(..)
) where

import Control.Effect.Carrier
import Data.Coerce

newtype Fail (m :: * -> *) k = Fail String
  deriving (Functor)

instance HFunctor Fail where
  hmap _ = coerce
  {-# INLINE hmap #-}

instance Effect Fail where
  handle _ _ = coerce
  {-# INLINE handle #-}