
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)? https://github.com/ekmett/bound/blob/master/src/Bound/Scope.hs ========================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 #-}