两类单子的连接函数

join function for two-kinded monads

我正在尝试更好地理解 monad。 所以我正在尝试为几个 monad 编写 return、连接和绑定实现。

然而当谈到二类单子时,我有点困惑

join :: m (m a) -> m a

m (m a) 暗示 monad 包裹在 monad 内部,但如果使用两类 monad,则暗示什么值。 例如,对于 State Monad:sa? State Monad 的正确 join 签名是什么样的?

state monad类型声明为State s a; 它仅在 m ~ State s.

时与 m a 统一
join :: State s (State s a) -> State s a