初识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 五:自定义数据类型和类型类的更多相关文章
- java中 引用传递、值传递的理解(数组,自定义类,基本数据类型,String类)
代码部分: public static void main(String[] args) { testInt(); testString(); testArray(); testX(); } publ ...
- Oracle自定义数据类型 1
原文 oracle 自定义类型 type / create type 一 Oracle中的类型 类型有很多种,主要可以分为以下几类: 1.字符串类型.如:char.nchar.varchar2.nva ...
- (C/C++学习笔记) 十五. 构造数据类型
十五. 构造数据类型 ● 构造数据类型概念 Structured data types 构造数据类型 结构体(structure), 联合体/共用体 (union), 枚举类型(enumeration ...
- Java 基础 面向对象修饰符和自定义数据类型
不同修饰符使用细节 常用来修饰类.方法.变量的修饰符如下: public 权限修饰符,公共访问, 类,方法,成员变量 protected 权限修饰符,受保护访问, 方法,成员变量 默认什么也不写 也是 ...
- Qt信号之自定义数据类型
[1]为什么需要自定义数据类型? 内置类型毕竟很有局限性,否则为什么还需要类呢.总之,有时候,我们多么希望信号能发送自定义数据类型. 幸哉~ Qt是支持自定义信号,且自定义信号可以发送自定义数据类型的 ...
- Redis学习笔记(3)—— 五种数据类型&keys的通用操作
一.Redis数据结构介绍 redis是一种高级的key-value的存储系统,其中的key是字符串类型,尽可能满足如下几点: 1)key不要太长,最好不要操作1024个字节,这不仅会消耗内存还会降低 ...
- 自定义数据类型使用QVariant转换的方法
QVariant类型的放入和取出必须是相对应的,你放入一个int就必须按int取出,不能用toString(), Qt不会帮你自动转换. 数据核心无非就是一个 union,和一个标记类型的type:传 ...
- java基础(14):Eclipse、面向对象、自定义数据类型的使用
1. Eclipse的应用 1. 常用快捷操作 Ctrl+T:查看所选中类的继承树 例如,在下面代码中,选中Teacher类名,然后按Ctrl+T,就会显示出Teacher类的继承关系 //员工 ab ...
- SpringMVC框架——自定义数据类型转换器
Spring MVC 框架的 Converter<S,T> 是一个可以将一种数据类型转换成另一种数据类型的接口,这里 S 表示源类型,T 表示目标类型. 开发中如果需要自定义数据类型转换时 ...
随机推荐
- 6. VIM 系列 - 全局搜索(ctrlsf.vim)
目录 全局搜索利器 ag.vim 更强大的全局搜索利器 ctrlsf.vim 全局搜索利器 ag.vim 终端上安装ag: sudo apt install silversearcher-ag vim ...
- vueJS报错记录列表以及解决方案
1.在elem团队新出的框架里,navMenu,控制台报missing required prop "index" 解决方案: 添加index的值 2.Duplicate keys ...
- 系列文章|OKR与敏捷(二):实现全栈敏捷
OKR与敏捷开发的原理有着相似之处,但已经使用敏捷的团队再用OKR感觉会显得多余.这种误解的根源就在于对这两种模式不够了解,运用得当的情况下,OKR和敏捷可以形成强强联合的效果,他们可以创造出以价值为 ...
- Redis哨兵机制
Redis Sentinel物理结构图 角色 IP Port 别名 master 127.0.01 6379 主节点 slave-1 127.0.01 6380 slave-1节点 slave-2 1 ...
- Centos7+lnmp+zabbix4+分离mysql实验
一.简介 1.什么是zabbix zabbix是一个企业级的.开源的.分布式的监控套件. zabbix可以对网络和服务进行完整性,健康性的监控.zabbix利用灵活的告警机制,可以实验微信,短信和邮件 ...
- [Javascript] encodeURIComponent()方法
在vue項目中使用vue-router通过url进行传值 encodeURIComponent encodeURIComponent() 函数可把字符串作为 URI 组件进行编码.encodeURIC ...
- 结对开发nabcd
各位领导/投资人/用户/合作伙伴: 我们的产品校园生活 是为了解决 广大在校师生对于信息难以得到的痛苦,他们需要了解有关于学校开办的各种活动的信息还有各种二手商品的交换信息,他们也需要一个公开的平台 ...
- Vmware安装CentOs7+gitlab(二)
在CentOS系统上安装所需的依赖:ssh,防火墙,postfix(用于邮件通知) ,wget,以下这些命令也会打开系统防火墙中的HTTP和SSH端口访问. 1.安装ssh和python sudo y ...
- js无法获取.net设置的cookie
使用CookieHelper帮助类: public class CookieHelper { #region 获取Cookie /// <summary> /// 获得Cookie的值 / ...
- 自己实现的TypeOf函数2
自己实现的typeOf函数:返回传入参数的类型 主要用于解决,js自带的typeof返回结果不精确:Ext JS中typeOf对字符串对象.元素节点.文本节点.空白文本节点判断并不准确的问题 与上一篇 ...