Skip to content
Go back

类型编程

Updated:

类型编程

and or

通过将其他类型与 and 组合而成的类型称为 product types。使用 or 组合的类型称为sum types。

product types

product types是通过使用 and 组合两个或多个现有类型来创建的。以下是一些常见示例:

分数可以定义为分子(整数)和分母(另一个整数

邮寄地址可能是街道地址、城市(字符串)、州(字符串)和邮政编码(整数)。

data Book = Book {
author :: AuthorName
, isbn :: String
, title :: String
, year :: Int
, price :: Double
}

product types的诅咒

仅通过组合现有类型来创建新类型就会产生有趣的软件设计模型。由于只能通过添加来扩展想法的限制,因此会受到自上而下的设计的限制,这是根据类层次结构设计软件的基础。

大概来说, 就是我们希望找到所有事物的共同点来逐层构建抽象,但随着各种意外情况的增多(现实世界的复杂性)会导致我们构建的分层越来越多。。

从理论上讲,创建对象层次结构很优雅,并且捕获了关于世界上所有事物如何相互关联的抽象。在实践中,即使创建微不足道的对象层次结构也会充满设计挑战。所有这些挑战的根源在于,在大多数语言中组合类型的唯一方法是使用 and。这迫使你从极端抽象开始并向下移动。不幸的是,现实生活中充满了奇怪的边缘情况,这使得事情比你通常想要的要复杂得多。

Sum types

Sum types是一个令人惊讶的强大工具,因为它们仅提供使用 or 组合两种类型的功能。以下是使用 or 组合类型的示例:

骰子可以是 6 面骰子或 20 面骰子

论文由一个人 (String) 或一群人 ([String]) 撰写

type FirstName = String
type LastName = String
type MiddleName = String
data Name = Name FirstName LastName
| NameWithMiddle FirstName MiddleName LastName

作者举了一个例子,大概就是对于不同的事物我们只需要添加不同的构造类并一起组合,

而不是像 product type 先构造事物类再抽象事物间的特点,如果特点不下沉的话还需要在公共类里定义一些其他事务类不需要的属性


Suggest Changes

Previous Post
类型类
Next Post
file in haskell