如果 return a = return b 那么 a=b 吗?

If return a = return b then does a=b?

你能证明如果return a = return b那么a=b吗?当我使用 = 时,我指的是定律和证明意义上的,而不是 Eq class 意义上的。

我知道的每个 monad 似乎都满足这个,我想不出一个有效的 monad 不会(Const a 是一个函子和应用程序,但不是 monad。)

没有。考虑简单的 monad:

data Trivial a = Cow

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