首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何证明两种类型的等价性以及签名是单独居住的?

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

Stack Overflow用户
提问于 2010-09-01 22:05:53
回答 1查看 176关注 0票数 8

任何关注托尼·莫里斯的博客和scala练习的人都会知道这两种类型的签名是等价的:

代码语言:javascript
复制
trait MyOption1[A] {
  //this is a catamorphism
  def fold[B](some : A => B, none : => B) : B 
}

和:

代码语言:javascript
复制
trait MyOption2[A] {
  def map[B](f : A => B) : MyOption2[B]
  def getOrElse[B >: A](none : => B) : B
}

此外,还指出该类型是单独居住的(即该类型的所有实现都是完全等价的)。我可以猜测这两种类型的等价性,但实际上不知道从何处开始使用单一居住语句。如何证明这一点?

EN

回答 1

Stack Overflow用户

发布于 2010-09-01 23:30:34

Option类型是双重居住的。它可以包含什么东西,也可以不包含。从fold在第一个特征中的签名可以清楚地看出这一点,在第一个特征中,您只能:

  • 返回应用some的结果,如果您的值为A类型(您是一个Some)
  • 返回none参数(您是None)

任何给定的实现只能执行一种或另一种,而不违反引用透明度。

所以我认为把它叫做单人区是个错误。但这两种特征的任何实现都必须与这两种情况中的一种同构。

编辑

尽管如此,我认为你不能在不知道它的构造函数的情况下真正描述一种类型的“居住性”。例如,如果要使用使用Tuple12[A]的构造函数的实现来扩展这些选项特性之一,则可以编写13个不同版本的fold

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3622469

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档