如果返回a =返回b,那么a = b?

你能certificate,如果return a = return b然后a=b ? 当我使用= ,我的意思是在法律和certificate的意义上,而不是Eq意义。

我所知道的每一个monad似乎都能满足这个要求,我想不出一个有效的monad,而不是( Const a是一个函数和应用,而不是monad)。

不可以。考虑一下微不足道的monad:

 data Trivial a = Cow instance Monad Trivial where _ >>= _ = Cow return _ = Cow