库的编译器或更“本地”的部分(可以访问魔术和实现的IO或函数)是否对这些定律做出假设?打破它们会导致不可能发生吗?

还是他们只是表达一种编程模式-即,您唯一会因打断他们而烦恼的人是使用您的代码并且不希望您这么粗心的人?

最佳答案

编译器不会对法律做任何假设,但是,如果您的实例不遵守法律,它将不会表现出单子(monad)的状态–会做奇怪的事情,否则对您的用户似乎无法正常工作(例如删除)值,或以错误的顺序评估事物)。

此外,假设单子(monad)法则成立,您的用户可能无法进行重构。

10-06 13:06