为什么Scalas不是monad?
发布时间:2020-12-16 18:43:40 所属栏目:安全 来源:网络整理
导读:我有兴趣知道 scala的设计决定.要么不是作为monad完成的.已经存在一些关于如何正确偏置的讨论,例如: right-biasing Either fixing Either Fixing scala.Either – unbiased vs biased 但是提到了太多的细节,我无法完整地了解为什么要这样做.有人可以概述一
我有兴趣知道
scala的设计决定.要么不是作为monad完成的.已经存在一些关于如何正确偏置的讨论,例如:
> right-biasing Either 但是提到了太多的细节,我无法完整地了解为什么要这样做.有人可以概述一个有正确偏见的好处,关于这样做的问题以及没有正确偏见的Either(如果它们甚至存在)的好处? 解决方法
我认为它只是归结为
Principle of Least Astonishment.使用Either编码成功或失败显然是人们所做的事情,但它不是Either的唯一用途.事实上,除了传统之外,没有太多理由让正确的成功和左派失败.正如上面提到的adelbertc的评论所提到的,scalaz具有专门编码的验证.
为了进一步证明上述POLA声明的合理性,请使用以下代码: def foo(): Either[Int,Int] = Right(1) def bar(j: Int): Either[Int,Int] = Left(1) def baz(z: Int): Either[Int,Int] = Right(3) // Result is Left(1) for (a <- foo().right; b <- bar(a).right; c <- baz(b).right) yield c 编译因为我在for表达式中使用.right投影.在这里,条形图中的左(1)是失败的情况是有意义的,因此这就是结果,但想象一下,如果这两个是偏右的.上面的代码将在没有表达式中的.right投影的情况下进行编译,如: for (a <- foo(); b <- bar(a); c <- baz(b)) yield c 如果你在代码中使用Either只是一个“一个或另一个”类型,你会惊讶于(1)这会编译和(2)它返回Left(1)并且看似永远不会执行巴兹. 总之,如果要使用Either编码成功或失败,请使用验证. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |