oxb*_*kes 8 type-theory functional-programming scala
任何一直关注托尼莫里斯博客和斯卡拉练习的人都知道这两种类型的签名是等价的:
trait MyOption1[A] {
//this is a catamorphism
def fold[B](some : A => B, none : => B) : B
}
Run Code Online (Sandbox Code Playgroud)
和:
trait MyOption2[A] {
def map[B](f : A => B) : MyOption2[B]
def getOrElse[B >: A](none : => B) : B
}
Run Code Online (Sandbox Code Playgroud)
此外,已经指出该类型是单独居住的(即该类型的所有实现都完全等效).我可以猜测证明这两种类型的等价性,但实际上并不知道从单一居住声明开始.如何证明这一点?
该Option类型为双居型。它可以包含某些东西,也可以不包含某些东西。从第一个特征中的签名可以清楚地看出这一点fold,其中您只能:
some如果您有一个类型的值A(您是 a Some) ,则返回应用的结果none论点(你是一个None)任何给定的实现只能执行其中之一,而不会违反引用透明度。
所以我认为称其为“独居”是错误的。但是这些特征中的任何一个的任何实现都必须与这两种情况之一同构。
也就是说,我认为如果不知道类型的构造函数,就无法真正描述其“居住性”。Tuple12[A]例如,如果您要使用具有采用 的构造函数的实现来扩展这些选项特征之一,您可以编写 13 个不同版本的fold.