在Haskell中,monads根据函数返回和绑定来定义,其中返回的类型为a -> m a
,绑定的类型为m a -> (a -> m b) -> m b
。之前已经指出monads can also be defined in terms of return and join,其中连接是m (m a) -> m a
类型的函数。绑定可以根据连接来定义,但是可能相反吗?可以根据绑定来定义连接吗?随着单子,可以加入定义的绑定?
没有加入,我不知道我会做什么,如果我曾经以某种方式得到了一个“两次包裹”monadic值m (m a)
- 没有一个函子或monad操作“删除任何图层”,可以这么说。如果这是不可能的,为什么Haskell和其他monad实现在绑定方面定义它们?它似乎严格地比基于连接的定义更有用。
注“也”:如果加入不能在绑定来定义,这将_have_是Monad'的'成员(或不会为所有monad定义),而不是。 –