Haskell 如果返回a=返回b,那么a=b吗?
你能证明如果Haskell 如果返回a=返回b,那么a=b吗?,haskell,monads,semantics,equality,equational-reasoning,Haskell,Monads,Semantics,Equality,Equational Reasoning,你能证明如果returna=returnb那么a=b?当我使用=时,我指的是法律和证明意义上的,而不是Eq类意义上的 我所知道的每一个单元格似乎都满足了这一点,我想不出一个有效的单元格,它不会( const a 是一个函子和应用程序,但不是一个单元格。)< /P> < P>不。考虑平凡单元格: data Trivial a = Cow instance Monad Trivial where _ >>= _ = Cow return _ = Cow …更好地称为Const
returna=returnb
那么a=b
?当我使用=
时,我指的是法律和证明意义上的,而不是Eq
类意义上的
我所知道的每一个单元格似乎都满足了这一点,我想不出一个有效的单元格,它不会(<代码> const a <代码>是一个函子和应用程序,但不是一个单元格。)< /P> < P>不。考虑平凡单元格:
data Trivial a = Cow
instance Monad Trivial where
_ >>= _ = Cow
return _ = Cow
…更好地称为
Const()
。为什么我要错过在Haskell程序中编写Cow
的机会?非平凡的单子呢?@dfeuer:可以使用参数加上遵守单子定律的需要排除中间立场,平凡的单子是唯一违反这一点的情况,其他所有操作都需要使用有效的a
调用传递给(>>=)
的函数,否则它将不符合第一个monad定律。-Cont()
是同构的一个微不足道的单子——这两个观察结果的证明留给您作为练习在comonad案例中有一个双重参数,如果结构上wa=wb
,则w
是无人居住的comonad或a=b
。注意:Cont Void
和Cont()
两者都起作用,但原因略有不同。