本节书摘来自异步社区《Haskell趣学指南》一书中的第2章,第2.3节类型变量,作者 【斯洛文尼亚】Miran Lipovaca,更多章节内容可以访问云栖社区“异步社区”公众号查看

2.3 类型变量
有时让一些函数处理多种类型将更加合理。比如head函数,它可以取一个列表作为参数,返回这一列表头部的元素。在这里列表中元素的类型不管是数值、字符还是列表,都不重要。不管它具体的类型是什么,只要是列表,head函数都能够处理。

猜猜head函数的类型是什么呢?用:t检查一下:

ghci> :t head
head :: [a] -> a

这里的a是什么?是类型吗?想想我们在前面说过,凡是类型其首字母必大写,所以它不是类型。它其实是个类型变量(type variable),意味着a可以是任何类型。

通过类型变量,我们可以在类型安全(type safe))的前提下,轻而易举地编写能够处理多种类型的函数。这一点与其他语言中的泛型(generic)很相似,但在Haskell中要更为强大,更容易写出通用的函数。

使用了类型变量的函数被称作多态函数(polymorphic function)。head函数即为此例,从它的类型声明中可以看出,它的参数类型为任意类型的元素组成的列表,返回的类型也正是该类型。

注意:
在命名上,类型变量使用多个字符是合法的,不过约定俗成,通常都是使用单个字符作为名字,如a,b,c,d...
还记得fst吗?它可以返回一个序对中的首项。查一下它的类型:

ghci> :t fst
fst :: (a, b) -> a

可以看出fst取一个元组作为参数,且返回类型与元组中首项的类型相同。这便是fst能够处理任何类型序对的原因。注意,a和b是不同的类型变量,并非特指二者表示的类型不同,这就意味着,在这段类型声明中元组首项的类型与返回值的类型可以相同。

《Haskell趣学指南》—— 第2章,第2.3节类型变量相关推荐

  1. 《Haskell趣学指南》—— 第1章,第1.2节小朋友的第一个函数

    本节书摘来自异步社区<Haskell趣学指南>一书中的第1章,第1.2节小朋友的第一个函数,作者 [斯洛文尼亚]Miran Lipovaca,更多章节内容可以访问云栖社区"异步社 ...

  2. 《Haskell趣学指南》笔记之I/O

    系列文章 <Haskell趣学指南>笔记之基本语法 <Haskell趣学指南>笔记之类型(type) <Haskell趣学指南>笔记之函数 <Haskell趣 ...

  3. [2017.02.21-22] 《Haskell趣学指南 —— Learning You a Haskell for Great Good!》

    {- 2017.02.21-22 <Haskell趣学指南 -- Learning You a Haskell for Great Good!> 学习了Haskell的基本语法,并实现了一 ...

  4. Haskell趣学指南4-6

    函数的语法 模式匹配 本章讲的就是haskell那套酷酷的语法结构,先从模式匹配开始.模式匹配通过检查数据的特定结构来检查其是否匹配,并按模式从中取得数据. 在定义函数时,你可以为不同的模式分别定义函 ...

  5. 【趣学算法】第二章 算法之美(下)

    14天阅读挑战赛 [趣学算法]第二章 算法之美(下) 1. 一棋盘的麦子 1.1 题目描述 1.2 题目解析 1.3 爆炸增量函数 称上面的函数(1.2中的第一个函数)为爆炸增量函数. 爆炸函数也就是 ...

  6. 【趣学算法】第一章 算法之美(上)

    14天阅读挑战赛 [趣学算法]第一章 算法之美(上) 文章目录 [趣学算法]第一章 算法之美(上) 1.打开算法之门 2.妙不可言---算法复杂性 2.1 算法的引入 [算法的定义] [算法题] [& ...

  7. 趣学数据结构--第六章:树

    趣学数据结构---->第六章:树 二叉树 线索二叉树 树的应用 二叉树的深度 二叉树的叶子数 二叉树的结点数 三元组创建二叉树 遍历序列还原树 哈夫曼树 二叉树 二叉树的创建(询问创建以及补空创 ...

  8. HTML5 权威指南第 10 章 文档分节 学习笔记

    HTML5 权威指南第 10 章 文档分节 学习笔记 第 8 章 标记文字 内容从从文字出发,专注如何将单体内容正确的呈现出来:第 9 章 组织内容 内容从段落出发,专注如何将单体内容合理的放在段落中 ...

  9. 趣学算法【第一章:算法之美】感悟(上)

    14天阅读挑战赛 前言 努力是为了不平庸~ 算法学习有些时候是枯燥的,这一次,让我们先人一步,趣学算法! 1.什么是算法,为什么要学习? 其实算法是一个比较模糊的概念,简单来说,算法就是将解决一件事的 ...

最新文章

  1. python逆序打印出各位数字_Python练习题 024:求位数及逆序打印
  2. 拿到国际AI比赛冠军的,居然是个搞教育的
  3. eclipse中多个工程编译到同一个目录下
  4. 不同网段互PING,对不?
  5. 考研复习——时间安排小结
  6. RandomAccessFile类的简单介绍,以及代码演示
  7. spring 使用小记
  8. Oracle使用小结
  9. python控制ppt定时_python中使用requests实现自动回帖.ppt
  10. Office文档在线预览接口服务器
  11. ElasticSearch 2 (18) - 深入搜索系列之控制相关度
  12. JavaWeb学习之EL表达式和JSTL标签库
  13. outlook2019登录126邮箱(imap)
  14. ICRA 2020轨迹预测竞赛冠军的方法总结
  15. tp5的时间查询,查询时间戳是否在某一天中
  16. MySQL5.7修改密码问题解决方案
  17. [附源码]java毕业设计基于的高校学生考勤管理系统
  18. 2021年Android面试心得,系列教学
  19. 七进制转十进制java_java基础——Java进制转换
  20. 【台大郭彦甫】Matlab入门教程超详细学习笔记六:高阶绘图(附PPT链接)

热门文章

  1. m4a录音文件损坏修复_电脑录音软件哪个好?分享这款录音软件,供你参考!
  2. 成立阿里大农业兄弟连-万祥军:农民丰收节交易会乡村脱贫
  3. HTML实现包含公共部分:通过ECMA6的模块化,纯前端实现类似jsp:include的功能
  4. [机器学习]梯度提升决策树--GBDT
  5. jQuery ajax的traditional参数的作用
  6. 基于Ubuntu+Owncloud的私有云网盘
  7. 学了C语言,如何利用CURL写一个下载程序?—用nmake编译CURL并安装
  8. 企业客户都满意的ToB产品运营秘诀
  9. 产品经理如何提升自己的配色能力
  10. PMCAFF问答精选 | 对于用户反馈,产品经理需要第一时间给出回应吗?