in-other-words-0.1.0.0: src/Control/Effect/Internal/Itself.hs
module Control.Effect.Internal.Itself where
import Control.Monad.Base
import Control.Monad.Trans.Control
newtype Itself m a = Itself { unItself :: m a }
deriving (Functor, Applicative, Monad)
instance Monad m => MonadBase m (Itself m) where
liftBase = Itself
{-# INLINE liftBase #-}
instance Monad m => MonadBaseControl m (Itself m) where
type StM (Itself m) a = a
liftBaseWith m = Itself (m unItself)
{-# INLINE liftBaseWith #-}
restoreM = return
{-# INLINE restoreM #-}