Haskell Types与Typeclasses

  可使用 :t 命令检测表达式类型。

  明确的类型首字母必大写。

一、Types

  Char

  Bool

  Int(有界,与Integer类型对比效率高)

  Integer(无界,与Int类型对比效率低)

  Float

  Double

  Tuple的类型取决于长度和其中元素的类型。

  List的类型只取决于其中元素的类型。

二、Typeclasses

  =>”表示约束。

  Eq:可比较相等性。

  Ord:可比较大小。

  compare:取两个Ord中相同类型的值做参数,结果为LT,GT,EQ三种情况(小于/大于/相等)。

  Show:可用字符串表示。

       show:将Show中成员类型转换为字符串。

  Read:与Show相逆。

       read:将字符串转换为Read中的成员类型。但是要明确其输出的类型,不明确的转换无法进行。read "1"是错误的表达式,而read "1" :: Int才是正确的表达式。

  Enum:表示可连续的类型。

       succ:前继。

       pred:后继。

  Bounded:拥有界限。

       minBound:下边界。例,minBound :: Int表达式是查看Int类型的下限是多少。

       maxBound:上边界。例,maxBound :: Int表达式是查看Int类型的上限是多少。

  Num:数字。

  Integral:整数。包括Int和Integer类型

  Floating:浮点数,包括Float和 Double类型。

       fromIntegral:将Integral转换为Num型。

三、对Types 与 Typeclasses的理解。

  1.一个表达式只能属于一种Type,但可以属于多种Typeclasses。

  2.把Type理解成类型,一个表达式只能属于一种类型。把Typeclass理解成属性,一个表达式可以拥有多种属性。

  3.属于相同类型的表达式,必然会有相同的属性。但拥有相同属性的表达式,却不一定属于相同的类型。

时间: 2024-10-13 20:07:34

Haskell Types与Typeclasses的相关文章

haskell Types 和 Typeclasses

Algebraic Data Types 入门 在前面的章节中,我们谈了一些 Haskell 内置的类型和 Typeclass.而在本章中,我们将学习构造类型和 Typeclass 的方法. 我们已经见识过许多类型,如 Bool.Int.Char.Maybe 等等,不过在 Haskell 中该如何构造自己的类型呢?好问题,一种方法是使用 data 关键字.首先我们来看看 Bool 在标准函式库中的定义: data Bool = False | True data 表示我们要定义一个新的类型.= 

Haskell手撸Softmax回归实现MNIST手写识别

Haskell手撸Softmax回归实现MNIST手写识别 前言 初学Haskell,看的书是Learn You a Haskell for Great Good, 才刚看到Making Our Own Types and Typeclasses这一章. 为了加深对Haskell的理解,便动手写了个Softmax回归.纯粹造轮子,只用了base. 显示图片虽然用了OpenGL,但是本文不会提到关于OpenGL的内容.虽说是造轮子, 但是这轮子造得还是使我受益匪浅.Softmax回归方面的内容参考

「SF-QC」2 TypeClasses - 黄玄的博客

Considerring printing different types with this common idiom: 1 2 3 4 5 6 showBool : bool → string showNat : nat → string showList : {A : Type} (A → string) → (list A) → string showPair : {A B : Type} (A → string) → (B → string) → A * B → string Defi

浅谈haskell中functor typeclass和普通typeclasses的区别

其实这个区别就好像普通函数和高阶函数的区别一样.这样是不是很好理解了呢,额,如果你说你还不知道啥是高阶函数,那么还是不要看这个文章了.下面来看看我是如何把他们类比起来的. 我们看看haskell中的Eq是如何定义的,这个我把它叫"普通typeclasses"(为了区分functor typeclasses,我就这么叫它了:P),这里定义了一个typeclasses并且在这个typeclasses里面定义了一个行为,普遍的说法就是你可以把这个typeclasses想象成java的inte

From Zero to HIPster (Haskell In Production)

(TL,DR)We're building a micro-service platform christened Hasura.io (alpha release scheduled in summer 2015), and we used Haskell as the core programming language to build it. This is a post for people who're not very sure about using Haskell in prod

haskell目录层次

[email protected] /usr/lib/ghc/haskell2010-1.1.1.0 $ tree . ├── Control │   └── Monad.hi ├── Data │   ├── Array.hi │   ├── Bits.hi │   ├── Char.hi │   ├── Complex.hi │   ├── Int.hi │   ├── Ix.hi │   ├── List.hi │   ├── Maybe.hi │   ├── Ratio.hi │   └

An introduction to parsing text in Haskell with Parsec

Parsec makes parsing text very easy in Haskell. I write this as much for myself as for anyone else to have a tutorial and reference which starts from the ground up and works through how each function can be used with examples all the way. First off,

Haskell学习笔记二:自定义类型

内容提要: 代数数据类型 - Algebraic Data Types: 自定义数据类型 - data关键字:值构造器:类型变量与类型构造器: 记录(Record)语法 - 简化自定义数据类型的一种语法糖: 一个完整的例子 - PurchaseOrder定义和简单计算.单元测试: 代数数据类型(Algebraic Data Types) 为什么Haskell的数据类型会有代数数据类型这个名字?回想我们初中时代,初次学习代数的情况,印象最深刻就是x,y,z代替了具体的数字,引入方程式的概念,对 解

Haskell学习笔记一:类型和类型类相关内容

内容提要: 静态类型系统: 编译时确定类型错误: 类型推导机制: 基础类型:Int,Integer,Float,Double,Bool,Char: 类型变量: 基础类型类:Eq,Ord,Show,Read,Enum,Bounded,Num,Integral,Floating: Haskell是一门函数式编程语言,被称为最为纯粹的函数式编程语言.Haskell的类型系统非常强大,其中包含了很多有趣.抽象.某种程度上充满学术气息的特质. Haskell属于静态类型语言,这意味着: 每个值或者表达式,