众所周知,(>>=)
可以使用fmap
和join
来实现,而join
可以使用>>=
来实现。我们是否有任何理由不定义包含Monad
的{{1}}类并使用以下默认定义?
join
这将允许最小定义包括join x = x >>= id
x >>= f = join $ f <$> x
或(>>=)
,而不是强制join
。考虑到类别理论倾向于(>>=)
。
反对修改类的常见理由是我们打破了向后兼容性。但是,在这种情况下,这不会发生 - 我们只添加使用join
定义Monad
的可能性。
答案 0 :(得分:21)
这意味着发生在Applicative-Monad proposal(已经进入GHC 7.10)。但是,GHC中a technical issue涉及type roles,无限期推迟了您的建议实施。