美文网首页
FP学习之三

FP学习之三

作者: 80s老人 | 来源:发表于2016-01-21 00:14 被阅读36次

Haskell里面的 Types 和Typeclasses到底是什么东东
Bool、Int、Char、Maybe 这些内建的类型Types我们都知道,其实函数式编程里面只有函数是“头等公民”
我们在过程式语言里熟知的类型在函数式语言里面并不是一成不变的,其实我们完全可以在一个内建类型都没有的基础上把语言大厦建立起来,不相信,看以下Haskell代码

data Bool = False | True

左边的是类型名,右面的就是值"构造子",代表可能的集合。

data Int = -2147483648 | -2147483647 | ... | -1 | 0 | 1 | 2 | ... | 2147483647

左边的是类型名,右面的就是所有整数集合。

够抽象,够一般。

data Shape = Circle Float Float Float | Rectangle Float Float Float Float

值构造子的本质是个函数,可以返回一个类型的值

ghci> :t Circle
Circle :: Float -> Float -> Float -> Shape
ghci> :t Rectangle
Rectangle :: Float -> Float -> Float -> Float -> Shape

原来构造子本身就是函数!

surface :: Shape -> Float
surface (Circle _ _ r) = pi * r ^ 2
surface (Rectangle x1 y1 x2 y2) = (abs $ x2 - x1) * (abs $ y2 - y1)

取Shape类型的一个值,返回Float类型的一个值,圆我们用_ 模式匹配不理会前2项.

ghci> surface $ Circle 10 20 10
314.15927
ghci> surface $ Rectangle 0 0 100 100
10000.0

相关文章

  • FP学习之三

    Haskell里面的 Types 和Typeclasses到底是什么东东Bool、Int、Char、Maybe 这...

  • 2018-05-30

    学习了文件的使用方法。 FILE *fp;void test(){fp=fopen("t1.txt","rt+")...

  • 10月20日

    今天学习了文件 1.文件指针 FILE *fp ; 2.打开文件 fp=fopen("文件名.txt","rt+"...

  • FP学习之二

    上次匿名函数的用法没理解透,弄2个例子复习下元组传参会这样 和下面这种是等价的,区别是传参的方式不同 还有一个左折...

  • FP学习之一

    最近开始学习函数式编程,目的是学习一种新的思路,不是形而上学的为纯函数而函数。谈谈 Currying (Haske...

  • FP学习之四

    首先,关于IO ,Monad最近不会有时间学习了。要更正下上次关于Typeclass概念,我上次仅仅把它理解为类型...

  • ROC

    把负样本识别错误的概率 FPR = \frac{FP}{N} = \frac{FP}{FP + TN} 把正样本识...

  • Swift函数式编程与面向协议编程

    函数式编程(FP) 一、函数式编程(FP)-高阶函数 二、函数式编程(FP) - 柯里化(Currying) 三、...

  • Lodash的FP模块

    前言:经常用Lodash的你,是否了解过它提供的FP模块?FP是啥 :FP(Functional Programm...

  • PHP 文档的读取和写入

    //读取// $fp = fopen("substr.php","r");//var_dump($fp)...

网友评论

      本文标题:FP学习之三

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