Scala 如何证明两种类型的等价性以及签名是单独存在的?
任何关注过和scala练习的人都会知道这两种类型的签名是等效的:Scala 如何证明两种类型的等价性以及签名是单独存在的?,scala,functional-programming,type-theory,Scala,Functional Programming,Type Theory,任何关注过和scala练习的人都会知道这两种类型的签名是等效的: trait MyOption1[A] { //this is a catamorphism def fold[B](some : A => B, none : => B) : B } 以及: 此外,已经声明该类型是单独居住的(即,该类型的所有实现完全等效)。我可以猜测证明这两种类型的等价性,但我真的不知道从何处开始单一居住声明。如何证明这一点?选项类型是双重居住的。它可以包含某些内容,也可以不包含。从第一个
trait MyOption1[A] {
//this is a catamorphism
def fold[B](some : A => B, none : => B) : B
}
以及:
此外,已经声明该类型是单独居住的(即,该类型的所有实现完全等效)。我可以猜测证明这两种类型的等价性,但我真的不知道从何处开始单一居住声明。如何证明这一点?选项类型是双重居住的。它可以包含某些内容,也可以不包含。从第一个特征中的
fold
的签名可以清楚地看出这一点,在该特征中,您只能:
- 如果您有一个类型为
的值,则返回应用a
的结果(您是some
)some
- 返回
参数(您是none
)none
也就是说,我认为如果不知道类型的构造函数,就无法真正描述类型的“居住性”。例如,如果您要使用一个具有构造函数的实现来扩展这些选项特性之一,该构造函数采用了
Tuple12[a]
,那么您可以编写13个不同版本的fold
cstheory.stackexchange.com可能是解决此问题的更好地方。
trait MyOption2[A] {
def map[B](f : A => B) : MyOption2[B]
def getOrElse[B >: A](none : => B) : B
}