Haskell入门(二):类型(Type)
python入门编程, 之后用c++学习数据结构,Haskell萌新。
参考教材:Learn You a Haskell for Great Good (http://learnyouahaskell.com/)
操作环境:Ubuntu下Linux64位虚拟机
Chapter2部分内容
常见的类型(Types)及特点
Int :整型,常见的 其范围由机器位数决定。书中说64位下是-2^63 ~ 2 ^63 (不过此处存疑,可能下界要+1?)
Integer: 没有上下界的整型
Float:单精度实数型(如果没记错是十进制的6位左右)
Double:双精度实数型
Bool: 布尔型,只有True 和 False 两种取值
Char: 单个Unicode 字符,使用时需要单引号(字符串用双引号,这一点与c++类似)
除了上面提到的以外,还有复合类型List 和Tuple。其中List类型由其中元素的类型决定,Tuple的类型由每一个元素的类型及元素个数决定。
需要注意的是, Haskell中所有的类型名首字母都大写。
查看对象类型
在Haskell里,使用:t object 来查看对象的类型。返回 object :: Type 。其中,双冒号表示 has type of (类型为)。
以下是常见对象的类型。对于[ ] 这种元素类型不确定的,返回 [ a ] 。(这可以与后面函数部分联系起来)
常见对象类型函数类型声明(type declaration)
使用 函数名::输入参数1类型->输入参数2类型->... ->输入参数n类型 -> 返回值类型
函数示例函数类型变量(type variables)
我们有时希望函数具有更广泛的使用,能对一系列类型的输入进行处理。因而有了函数类型变量。它的功能类似于c++里的template 模板函数,不过写法更加方便。通常使用a, b, c, d等单个小写字母表示类型变量。我们可以通过:t查看内部一些函数的声明。
一些函数的声明类型的类限制(class constraint)
有时我们希望对上面提到的类型变量加一些条件,希望输入的类型具有特定的性质。具有某些特定性质的类型们在一起组成了一个类,而我们使用=>对类加以限制。
这里的类与c++,python中的有区别,更多的是指某个类型具有某种特定的性质,因而一个类型可以从属于多个类,一个类也可以包含多个类型。当然,类之间也存在包含关系(与继承类似,但也有区别)
常见的类有:
Eq(可判断元素是否相同)
Ord(元素可比较大小、优先级关系)
Enum(元素以一定次序排列)
Show(元素可以以String形式输出)
Read(元素可以由String转化而来的。使用时可以使用::来限制转化而来的类的类型)
Bounded(元素有上下界(minBound, maxBound))
Num: 元素有数字类型。(Int, Integer, Float, Double都是)
Floating: 元素是浮点类型(Float, Double)
Integral: 元素是整数类型。(Int, Integer)