加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – 如何证明两种类型的等价性以及签名是单独居住的?

发布时间:2020-12-16 08:55:13 所属栏目:安全 来源:网络整理
导读:任何一直关注 Tony Morris’ blog和scala练习的人都知道这两种类型的签名是等价的: trait MyOption1[A] { //this is a catamorphism def fold[B](some : A = B,none : = B) : B } 和: trait MyOption2[A] { def map[B](f : A = B) : MyOption2[B] def getO
任何一直关注 Tony Morris’ blog和scala练习的人都知道这两种类型的签名是等价的:

trait MyOption1[A] {
  //this is a catamorphism
  def fold[B](some : A => B,none : => B) : B 
}

和:

trait MyOption2[A] {
  def map[B](f : A => B) : MyOption2[B]
  def getOrElse[B >: A](none : => B) : B
}

此外,已经指出该类型是单独居住的(即,该类型的所有实现完全等同).我可以猜测证明这两种类型的等价性,但不知道从单一居住声明开始的位置.如何证明这一点?

解决方法

Option类型是双重居住的.它可以包含或不包含.从第一个特征中的折叠签名中可以清楚地看出,您只能在其中:

>返回应用一些的结果,如果你有一个A型的值(你是一些)
>返回你的无论证(你是无)

任何给定的实现只能执行一个或另一个,而不会违反引用透明性.

所以我认为把它称为单人居住是错误的.但任何这些特征的任何实现都必须与这两种情况中的一种同构.

编辑

也就是说,我不认为你可以在不知道它的构造函数的情况下真正描述某种类型的“居住”.例如,如果您使用具有构造函数的实现来扩展这些选项特征中的一个,这些构造函数采用了Tuple12 [A],那么您可以编写13个不同版本的折叠.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读