程序员函数式语言Haskell

Haskell入门(二):类型(Type)

2019-01-23  本文已影响38人  _小轩窗_

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)

        

上一篇下一篇

猜你喜欢

热点阅读