Get Programming with Haskell-18
到目前为止,我们已经讨论了类型如何像数据一样被加和乘。 像函数一样,类型也可以接受参数。类型通过在其定义中使用类型变量来接受参数(因此它们的参数总是其他类型)。使用参数定义的类型称为参数化类型。参数化类型在 Haskell 中扮演着重要的角色,因为它们允许你定义可以与各种现有数据一起使用的通用数据结构。
个人博客
关于软件、系统设计与持续学习。文章由 Notion 写作并在这里发布。
目前已发布 302 篇文章。
筛选结果
共 25 篇
到目前为止,我们已经讨论了类型如何像数据一样被加和乘。 像函数一样,类型也可以接受参数。类型通过在其定义中使用类型变量来接受参数(因此它们的参数总是其他类型)。使用参数定义的类型称为参数化类型。参数化类型在 Haskell 中扮演着重要的角色,因为它们允许你定义可以与各种现有数据一起使用的通用数据结构。
组合两个事物意味着什么?这里有一些例子:你可以连接两个列表得到一个新的列表,你可以合并两个文档得到一个新的文档,你可以混合两种颜色得到一种新的颜色。在许多编程语言中,每种组合类型的方法都有其自己独特的操作符或函数。与几乎每种编程语言都提供将类型转换为字符串的标准方法非常相似,Haskell 提供了一种将相同类型的实例组合在一起的标准方法。
你将更仔细地研究一些我们已经介绍过的类型。你这样做是为了更多地了解 Haskell 类型的独特之处以及如何使用类型设计程序。到目前为止,你所看到的大多数类型都是代数数据类型。代数数据类型是通过组合其他类型而形成的任何类型。理解代数数据类型的关键在于准确地知道如何组合其他类型。幸运的是,只有两种方法。你可以使用“与”组合多种类型(例如,一个名字是一个 String 与另一个 String),或者你可以使用“或”组合类型(例如,一个 Bool 是一个 True 数据构造器 或一个 False 数据构造器)。通过使用“与”组合其他类型而形成的类型称为积类型(product types)。使用“或”组合而形成的类型称为和类型(sum types)。
每个人都喜欢能与朋友秘密通信的想法。在这个总结项目中,你将运用你对类型和类型类的知识,构建几个示例密码。密码(cipher)在密码学中是一种对信息进行编码的方法,使他人无法阅读。密码是密码学的基础,但它们本身也非常有趣、值得玩味。你将首先接触一个容易实现也容易破解的密码,然后进一步了解字符加密的基础知识,最后你将构建一个不可破解的密码!
你将更深入地了解如何实现已有的类型类。这将使你能够为你自定义的新类型实现类型类,从而利用大量现有的函数功能。
你将学习 Haskell 类型系统中的一个重要抽象——类型类(Type classes)。类型类允许你根据共享的行为对类型进行分组。乍一看,类型类类似于大多数面向对象编程语言中的接口。类型类声明了一个类型必须支持哪些函数,就像接口规定了一个类必须支持哪些方法一样。但类型类在 Haskell 中扮演的角色,比在 Java 或 C# 等语言中的接口更为重要。主要的区别是,当你深入学习 Haskell 时,你会发现类型类通常要求你以越来越强大的抽象形式进行思考。在许多方面,类型类是 Haskell 编程的核心。
在Haskell中为数据创建类型,其重要性不亚于面向对象语言中创建类
本节将介绍 Haskell 最强大的特性之一——其健全的类型系统
主题索引