美文网首页
Haskell 01 类型类和它的实例们

Haskell 01 类型类和它的实例们

作者: 科学Jia | 来源:发表于2018-03-17 21:44 被阅读19次

最可怕的事情还是发生了。

对着阿里云玩了一周以后,我发现我开始爱上阿里云了…做梦都是k8s的master的负载均衡,用deployment的yaml文件,把service绑定到某些label的Pod上,同样用loadbalance对多个Pod做负载均衡…

言归正传,既然Haskell作为邪教语言,我还是要记下它的一些要点:

1. 千万不要将Haskell的类型类与面向对象OO里的Class的概念搞混淆。

类型类是一组函数的集合,如果将某类型实现为某类型类的实例,那就需要为这一类型提供这些函数的相应实现。也就是说,你要说你是某类型类的一个实例,那你必须实现这个类型类所描述的行为,实现这些函数集合。拿相等性函数举例:(==) :: (Eq a) => a -> a -> Bool, 其中,=> 表示约束符号,左侧是类型约束:(Eq a),可以理解为:“相等性函数取两个相等类型的值作为参数并返回一个布尔值,而这两个参数的类型a同为Eq类的实例。” 也即,a这个类型变量必然定义和实现了==这个函数(这里a叫类型变量,也就是其他语言里的泛型)

Eq类型类的函数集合包含两个==(相等性函数)和/=(不等性函数), 主要实现了这两个函数的类型,都叫Eq类型类的一个实例。注意:不要跟OO里的Class搞混淆。

目前,所有基础常见类型(Int, Float, Char, etc.) 都是Eq类型类的实例。

2. Haskell是个静态类型语言,它必须在编译之前搞清楚所有表达式的类型。例如:在调用read类型类后,不做计算或着类型注解(e.g. read "5" - 2 或 read “5” :: Int) 那么编译器会搞不清返回类型是什么?

3. 一个类型可以是多个类型类的实例,比如Char类型就是多个类型类的实例,一个类型类也包含多个类型作为实例。

4. 函数式编程的一般思路:先取一个初始的集合并将其变形,随后持续利用过滤条件缩小计算范围,最终取得一个(或多个)最终解。

例如:用Haskell来找到满足以下条件的直角三角形:

* 三边长度皆为整数;

* 三边长度皆小于等于10;

* 周长为24的直角三角形。

实现:rightTriangles = [ (a, b, c | c <- [1..10], a <- [1..c], b <- [1..10], a^2 + b^2 == c^2, a + b + c == 24 ]

以上。

手机码字太痛苦了…

下雨的周末愉快

相关文章

  • Haskell 01 类型类和它的实例们

    最可怕的事情还是发生了。 对着阿里云玩了一周以后,我发现我开始爱上阿里云了…做梦都是k8s的master的负载均衡...

  • Haskell 类型类

    类型类,类似其他语言的接口,但是它用的关键字在 Haskell 是 class,类如 Eq 类型类是这样的,最好一...

  • [Haskell] 数字类型之间的转换

    受Common Lisp与Scheme影响,Haskell提供了多种类型的数字。使用类型类(type class)...

  • 01 数据类型

    swift中结构体在haskell中的描述 枚举类型在haskell中的描述 枚举携带类型在haskell中描述 ...

  • Swift 类型转换

    类型转换 类型转换可以判断实例的类型,也可以将该实例在其所在的类层次中视为其父类或子类的实例。 Swift 中类型...

  • Swift 类型转换

    Swift 语言类型转换可以判断实例的类型。也可以用于检测实例类型是否属于其父类或者子类的实例。 Swift 中类...

  • 【极客班】Swift高级编程一

    Swift语言简介 值类型与引用类型 类型成员: 类与结构:类的实例是对象,结构的实例是值;类的存储是引用类型,堆...

  • java学习

    子类是父类的类型,但父类不是子类的类型。 子类的实例可以声明为父类型,但父类的实例不能声明为子类型。 class ...

  • swift 类型转换

    可以判断实例的类型。也可以用于检测实例类型是否属于其父类或者子类的实例 类型转换使用 is、as、as? 、as!...

  • Type Casting(类型转换)

    //类型转换//“类型转换 可以判断实例的类型,也可以将实例看做是其父类或者子类的实例。”//“类型转换在 Swi...

网友评论

      本文标题:Haskell 01 类型类和它的实例们

      本文链接:https://www.haomeiwen.com/subject/bohsqftx.html