Hi,
In Scope.hs there is one instance of Monad and one instance of MonadTrans for Scope,
For the Monad instance, it is defined like this: Monad (Scope b f);
For the MonadTrans instance, it is like this: MonadTrans (Scope b);
Does it mean:
In ">>=" the e represents (a) of (Scope b f a)?
In lift function the m represents (f a) of (Scope b f a)?
========================Scope.hs================================
instance Monad f => Monad (Scope b f) where
#if !MIN_VERSION_base(4,8,0)
return a = Scope (return (F (return a)))
{-# INLINE return #-}
#endif
Scope e >>= f = Scope $ e >>= \v -> case v of
B b -> return (B b)
F ea -> ea >>= unscope . f
{-# INLINE (>>=) #-}
instance MonadTrans (Scope b) where
lift m = Scope (return (F m))
{-# INLINE lift #-}