【发布时间】:2016-05-02 10:58:45
【问题描述】:
你能证明如果return a = return b 那么a=b?当我使用= 时,我指的是法律和证明的意义,而不是Eq 类的意义。
我知道的每个 monad 似乎都能满足这一点,我想不出一个不会满足的有效 monad(Const a 是函子和应用程序,但不是 monad。)
【问题讨论】:
标签: haskell monads semantics equality equational-reasoning
你能证明如果return a = return b 那么a=b?当我使用= 时,我指的是法律和证明的意义,而不是Eq 类的意义。
我知道的每个 monad 似乎都能满足这一点,我想不出一个不会满足的有效 monad(Const a 是函子和应用程序,但不是 monad。)
【问题讨论】:
标签: haskell monads semantics equality equational-reasoning
没有。考虑微不足道的 monad:
data Trivial a = Cow
instance Monad Trivial where
_ >>= _ = Cow
return _ = Cow
【讨论】:
Const ()。
Cow 的机会?
a 发送至(>>=)——否则它将不符合第一条单子定律。 -- Cont () 是同构的微不足道的单子 -- 这两个观察的证明留给你作为练习。 ;) 在comonad 的情况下有一个双重参数,如果w a = w b 在结构上那么w 是无人居住的comonad 或a = b。
Cont Void 和 Cont () 都有效,但原因略有不同。