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 五:自定义数据类型和类型类的更多相关文章

  1. java中 引用传递、值传递的理解(数组,自定义类,基本数据类型,String类)

    代码部分: public static void main(String[] args) { testInt(); testString(); testArray(); testX(); } publ ...

  2. Oracle自定义数据类型 1

    原文 oracle 自定义类型 type / create type 一 Oracle中的类型 类型有很多种,主要可以分为以下几类: 1.字符串类型.如:char.nchar.varchar2.nva ...

  3. (C/C++学习笔记) 十五. 构造数据类型

    十五. 构造数据类型 ● 构造数据类型概念 Structured data types 构造数据类型 结构体(structure), 联合体/共用体 (union), 枚举类型(enumeration ...

  4. Java 基础 面向对象修饰符和自定义数据类型

    不同修饰符使用细节 常用来修饰类.方法.变量的修饰符如下: public 权限修饰符,公共访问, 类,方法,成员变量 protected 权限修饰符,受保护访问, 方法,成员变量 默认什么也不写 也是 ...

  5. Qt信号之自定义数据类型

    [1]为什么需要自定义数据类型? 内置类型毕竟很有局限性,否则为什么还需要类呢.总之,有时候,我们多么希望信号能发送自定义数据类型. 幸哉~ Qt是支持自定义信号,且自定义信号可以发送自定义数据类型的 ...

  6. Redis学习笔记(3)—— 五种数据类型&keys的通用操作

    一.Redis数据结构介绍 redis是一种高级的key-value的存储系统,其中的key是字符串类型,尽可能满足如下几点: 1)key不要太长,最好不要操作1024个字节,这不仅会消耗内存还会降低 ...

  7. 自定义数据类型使用QVariant转换的方法

    QVariant类型的放入和取出必须是相对应的,你放入一个int就必须按int取出,不能用toString(), Qt不会帮你自动转换. 数据核心无非就是一个 union,和一个标记类型的type:传 ...

  8. java基础(14):Eclipse、面向对象、自定义数据类型的使用

    1. Eclipse的应用 1. 常用快捷操作 Ctrl+T:查看所选中类的继承树 例如,在下面代码中,选中Teacher类名,然后按Ctrl+T,就会显示出Teacher类的继承关系 //员工 ab ...

  9. SpringMVC框架——自定义数据类型转换器

    Spring MVC 框架的 Converter<S,T> 是一个可以将一种数据类型转换成另一种数据类型的接口,这里 S 表示源类型,T 表示目标类型. 开发中如果需要自定义数据类型转换时 ...

随机推荐

  1. ArrayBlockQueue源码解析

    清明节和朋友去被抖音带火的一个餐厅,下午两点钟取晚上的号,前面已经有十几桌了,四点半餐厅开始正式营业,等轮到我们已经近八点了.餐厅分为几个区域,只有最火的区域(在小船上)需要排号,其他区域基本上是随到 ...

  2. springboot结合maven打包发布

    本篇分享如何使用maven便利我们打springboot的发布包:我这里使用的是idea开发工具,首先创建了多个module的项目结构,如图: 要对多个module的项目做打包,一般情况都是在父级po ...

  3. 从壹开始前后端分离【 .NET Core2.0 +Vue2.0 】框架之二 || 后端项目搭建

    前言 至于为什么要搭建.Net Core 平台,这个网上的解释以及铺天盖地,想了想,还是感觉重要的一点,跨平台,嗯!没错,而且比.Net 更容易搭建,速度也更快,所有的包均有Nuget提供,不再像以前 ...

  4. 【重学计算机】机组D6章:中央处理器

    1. CPU的组成与功能 2. 数据通路 概念:执行部件间传送信息的路径,分共享通路(总线)和专用通路 抽象模型:时钟驱动下,A --> 组合逻辑 --> B D触发器定时模型: 时钟触发 ...

  5. 【Android Studio安装部署系列】四、Android SDK目录和作用分析

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 概述 Android SDk Tool软件开发工具包(software development kit).被软件开发工程师用于为特定的软件 ...

  6. Android序列化

    1.序列化的目的 (1)永久的保存对象数据(将对象数据保存在文件当中,或者是磁盘中 (2)通过序列化对象在网络中传递对象 (3)通过序列化对象在进程间传递 (4)在Intent之间,基本的数据类型直接 ...

  7. Java集合详解1:ArrayList,Vector与Stack

    今天我们来探索一下LinkedList和Queue,以及Stack的源码. 具体代码在我的GitHub中可以找到 https://github.com/h2pl/MyTech 喜欢的话麻烦star一下 ...

  8. Linux高级命令进阶(week1_day2)--技术流ken

    输出重定向 场景:一般命令的输出都会显示在终端中,有些时候需要将一些命令的执行结果想要保存到文件中进行后续的分析/统计,则这时候需要使用到的输出重定向技术. >:覆盖输出,会覆盖掉原先的文件内容 ...

  9. C++系列总结——继承

    前言 前面讲了封装,但封装只是隐藏了类内部实现.如果使用多态隐藏类本身的话,只有封装是不够的,还需要继承. 继承 通过封装.我们把一些相关的函数和变量包裹在了一起,这些函数和变量就叫做类的成员函数和成 ...

  10. 关于时间的那些事--PHP、JavaScript、MySQL操作时间

    PHP篇 PHP中时间操作单位是秒 一.将时间戳转为普通日期格式 //当前时间戳 time(); //当前时间格式 date("Y-m-d H:i:s",time()); //昨天 ...