我试图更好地了解monads。 所以我试图为几个monad编写返回,连接和绑定实现。
然而,当来到两个单身的monad时,我有点困惑
join :: m (m a) -> m a
m (m a)
表示包含在monad中的monad,但是如果使用双重monad则暗示了什么值。
例如State Monad:s
或a
? State Monad的正确加入签名是什么样的?
答案 0 :(得分:10)
状态monad类型声明为State s a
;
它仅与m a
合并m ~ State s
。
join :: State s (State s a) -> State s a