FP学习之三

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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容