fused-effects-0.1.0.0: src/Control/Effect/Lift/Internal.hs
{-# LANGUAGE DeriveFunctor, KindSignatures #-}
module Control.Effect.Lift.Internal
( Lift(..)
) where
import Control.Effect.Carrier
import Data.Coerce
newtype Lift sig (m :: * -> *) k = Lift { unLift :: sig k }
deriving (Functor)
instance Functor sig => HFunctor (Lift sig) where
hmap _ = coerce
{-# INLINE hmap #-}
instance Functor sig => Effect (Lift sig) where
handle state handler (Lift op) = Lift (fmap (handler . (<$ state)) op)