初识Haskell 五:自定义数据类型和类型类

Posted will-zyq

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了初识Haskell 五:自定义数据类型和类型类相关的知识,希望对你有一定的参考价值。

Discrete Mathematics Using a Computer的第一章Introduction to Haskell进行总结。环境Windows


自定义数据类型 data type definitions

  形式如:

    data Colour = Red | Orange | Yellow | Green | Blue | Violet

  Colour type包含了Red Orange Yellow Green Blue Violet这些值,这些值是constructor,其开头字母要大写。

  还有包含类型变量type variables的形式:

  data Animal a b = Cat a | Dog b | Rat

  自定义类型数据可用于当计算没有结果会导致程序出错时,可定义一个值作为当不存在结果时的答案。要打印自定义类型的值要在定义时加deriving Show,如:

  data Colour = Red | Orange | Yellow | Green | Blue | Violet deriving Show。

 自定义类型类 type class

  从 + 操作说起,+可以作用于许多类型如整形和浮点型等,其得出的结果类型也不是单一的,这就有个问题:+的类型是什么?如果是(+) :: Integer -> Integer -> Integer的话,则当浮点数相加时是不符合的,而如果是(+) :: a -> a -> a就意味着任何类型都适用,如True + False,这也不对,我们想要的是当类型是数字numeric时适用,实际上(+)的定义为:

  (+) :: Num a => a -> a -> a

  Num是类型类type class,Num包括Int, Integer, Float, Double等类型。Num a =>称为类限制(class constraint or context),表示只有当参数的类型是属于Num时(+)才适用。

  Haskell允许自定义类型类(如何定义这本书因不涉及没讲),常用的类型类有Num, Show, Eq。Num表示该类是数字numeric,Show表示可转换成字符串,Eq表示可用于比较是否相等。

以上是关于初识Haskell 五:自定义数据类型和类型类的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Haskell 中访问没有记录语法的自定义数据类型的字段?

Haskell类具有多态数据定义的实例

C++C++自学旅程:类类型初识——类的定义

初识Haskell 二:基本操作和类型Type

为啥 Haskell 没有在函数签名中推断数据类型的类型类?

使用 haskell 读取和类型类 - 模棱两可的类型变量错误