所以我的理解是有两种类型的代数数据类型(ADT)。对于Scala中的Option[T]
或Java中的Optional<T>
,这是sum类型还是产品类型的示例?
答案 0 :(得分:2)
在Haskell中定义Option[T]
类型可以清楚地表明它是和类型。
data Option t = None | Some t
Option t
类型的值可以是以下两种情况之一:
None
Some t
因此,Option[T]
和Optional<T>
都会使用T
类型,然后再添加1个可能的值(None
)。
为了好玩,我们还可以将此ADT转换为代数方程式:
Option(t) = 1 + t
要了解原因,请参阅此问题:Abusing the algebra of algebraic data types - why does this work?