类型类Type classes是一种定义某种行为的接口。如果类型是类型类的成员,则意味着类型支持并实现了类型类定义的行为。
类约束
== 函数的类型,如下
:type (==)
(==) :: Eq a => a -> a -> Bool
=>符号定义了一个类约束,==函数接受两个相同类型的形参,并返回Bool类型。这两个形参的类型必须是Eq类型类的成员(类约束)
Eq类型类
Eq类型类提供了相等比较的接口,任何有意义比较两个值是否相等的类型都必须是Eq类型类的成员
除了IO类型(处理输入/输出的类型)和函数之外的所有Haskell标准类型都是Eq类的一部分
Ord类型类
除了函数以外,所有类型都是Ord类型类的一部分,Ord类型类涵盖了>, <, >=, <=等所有比较函数
compare函数,如下
:type compare
compare :: Ord a => a -> a -> Ordering
compare函数接受Ord类型类中相同类型的两个成员,并返回它们的顺序
顺序由Ordering类型表示,该类型可以有三个不同的值,GT、EQ、LT,分别表示大于、等于、小于,如下
5 `compare` 3
GT
'a' `compare` 'z'
LT
Show类型类
除了函数以外,所有的类型都是Show类型类的一部分
该类型类使用最多的函数是show函数,它接受属于Show类型类的值,并将其表示为文本字符串,如下
:type show
show :: Show a => a -> String
show 3
"3"
show True
"True"
show [1, 2, 3]
"[1, 2, 3]"
Read类型类
除了函数以外,所有的类型都是Read类型类的一部分,Read类型类就像与Show相反的类型类
read函数接受一个字符串,并返回一个属于Read成员类型的值,如下
read "True" || False
True
read "8.2" + 3.8
12.0
read "[1,2,3,4]" ++ [5]
[1,2,3,4,5]
read函数,如下
:type read
read :: Read a => String -> a
read函数返回一个属于Read类型类的类型,但如果不在其他地方使用它,则无法知道它具体是什么类型,因此我们需要使用显式类型注释
通过在表达式的末尾添加::,然后指定类型来做到这一点,如下
read "5" :: Int
5
read "5" :: Float
5.0
read "[1,2,3,4]" :: [Int]
[1,2,3,4]
Enum类型类
Enum类型类的成员是按顺序排序的类型,它们可以被枚举,可以使用succ函数和pred函数
Num类型类
Num是数字的类型类,它的成员具有能够表现得像数字的特性,如下
:type 20
(20) :: Num a => a
所有的数字都是多态常数,它们可以充当Num类的任何类型,如下
20 :: Int
20
20 :: Integer
20
20 :: Float
20.0
20 :: Double
20.0
Integral类型类
Integral也是一个数字类型类
- Num类型类包括所有的数字,实数和整数
- Integral只包括整数,Int类型和Integer类型是该类型类的成员
一个非常有用的处理整数的函数是fromIntegral,如下
:type fromIntegral
fromIntegral :: (Integral a, Num b) => a -> b
接受一个整数,并将其转换为一个Num类型类的数字
Floating类型类
Floating类型类只包含Float类型和Double类型
标签:20,函数,Show,Read,read,Num,类型,Eq From: https://www.cnblogs.com/muyangui/p/17278795.html