这个问题的答案表明,Scala 中 Option 上的 fold 方法是一种变态。来自维基百科的catamophism是“从初始代数到其他代数的独特同态。这个概念已被应用于函数式编程作为折叠”。所以这看起来很公平,但让我把初始代数作为F-algebras类别中的初始对象。
因此,如果 Option 上的折叠真的是一个变态,则需要一些函子 F,以创建 F 代数的类别,其中 Option 将是初始对象。我不知道这个函子会是什么。
对于 Lists 类型A
的函子F
是F[X] = 1 + A * X
. 这是有道理的,因为 List 是一种递归数据类型,所以如果X
是,List[A]
那么上面的内容读取类型列表A
要么是空列表 ( 1
),要么是 ( ) an和 a+
的对 ( ) 。但 Option 不是递归的。将只是(无或)。所以我看不到函子在哪里。*
A
List[A]
Option[A]
1 + A
A
为了清楚起见,我意识到 Option 已经是一个仿函数,因为它需要A
to Option[A]
,但是对列表所做的事情是不同的,它A
是固定的,并且仿函数用于描述如何递归地构造数据类型。
在相关的说明中,如果它不是变质,它可能不应该被称为折叠,因为这会导致一些混乱。