在阅读Scott Wlaschin对递归类型的精彩介绍时,我注意到他在下面的区别并集定义中将Book的case构造函数称为类型构造函数。
type Gift =
| Book of Book
| Chocolate of Chocolate
| Wrapped of Gift * WrappingPaperStyle
| Boxed of Gift
| WithACard of Gift * message:string
在以下部分:
类型构造函数和处理程序之间的关系
Scott说:
Gift.Book构造函数获取一本书并返回一个Gift
其中Book
为:
type Book = {title: string; price: decimal}
对我来说,这听起来像是一个数据构造函数,而不是一个类型构造函数。有趣的是,数据构造函数这个术语在F#语言规范中只使用过一次,我在同一个文档中找不到任何关于它的描述。
F#中是否明确定义了这些概念?我认为上面的帖子应该引用数据构造函数而不是类型构造函数,这是错误的吗?
要在Haskell中描述SUM类型,请执行以下操作:
data Mytype = Yes | No
并且您将其称为Yes
是数据构造函数的数据类型。
在F#中:
type MyType = Yes | No
并且您将其称为有区别的并集,将Yes
称为并集大小写以及(并集(大小写构造函数。
在这两种情况下,我们都是指代数数据类型。