资讯详情

《Haskell趣学指南》读书笔记(2):Type And Typeclass

前言:Haskell同python类似,支持类型推导,不需要额外告知数据类型。现在我们将理解haskell的类型系统

Type相关

|| :t 命令 检测表达式类型

Prelude>  :t  "aaa""aaa"  ::  [Char]  

|| :

mylast    ::  [a]  ->a    --类型声明mylast[]  =  error"empty list"mylast  [x]  =  xmylast  (x:xs)    =  mylast  xs
--多个参数myadd    ::  int  ->  int  ->  intmyadd  x  y  z  =  x      y      z

|| 基本数据类型 Char / Int / Float / Double / Bool (

|| 函数的数据类型 注意: 其中 a 不是数据类型,而是数据类型一个变量,在haskell中变量可以是任何类型 !

*Main>  :t  headhead  ::  [a]  ->  a*Main>  :t  initinit  ::  [a]  ->  [a]*Main>  :t  fstfst  ::  (a,  b)  ->  a

注意: 使用到类型变量为参数的函数被称为“多态函数”,可以接收热议类型的List

Typeclasses 相关

类型类

--查看 函数 == 的类型声明是怎样的*Main> :t (==)(==) :: Eq a => a -> a -> Bool*Main> :t (>)(>) :: Ord a => a -> a -> Bool(*) :: Num a => a -> a -> a*Main> :t (+)(+) :: Num a => a -> a -> a*Main> :t (-)(-) :: Num a => a -> a -> a*Main> :t (*)(*) :: Num a => a -> a -> a*Main> :t (/)(/) :: Fractional a => a -> a -> a

|| 左边的部分称为类型约束,(由 前文知,变量a原本可以是任意类型,现在被约束) 针对Eq a => a -> a -> Bool 我们可以解读为:“相等函数取两个相同类型的值作为参数并回传一个Bool值,而这两个参数的类型在Eq这个类中(Eq对函数进行了类型的约束)”

|| 基本的Typeclass:

||| Eq 包含可判断相等性的类型。 == 、/= ( 除函数外所有的类型都属于Eq,故只有函数不能判断相等性)

||| Ord 包含可比较大小的类型 > < >= <= ( 除函数外所有的类型都属于Ord,故只有函数不能进行大小比较) 注意: 一个类型若是Ord类型,则必先是Eq类型

||| Show 包含可用字符串表示的类型 ‘show a’ ( 除函数外所有的类型都属于Show,故只有函数不能用字符串表示)

*Main> show 11"11"

||| Read 包含可以由一个字符串转而成的其他的类型 read “a” (所有的类型都属于Read)

--read可以将字符串转化为Read中某类型*Main> read "123" + 1124--报错 read不知道具体转换为哪个类型*Main> *Main> read "123"<interactive>:11:1: error: parse error on input ‘*’

Enum 包含可枚举的类型(也就是连续的类型) Bool,Char,Ordering, Int, Integer,Float,Double

Bounded 包含有一个上限和一个下限的类型 Int Char Bool

Num 是表示数字(整数和实数)的Typeclass,它的成员类型有数字特征

Integral 包含整数 Int Integer

Floating 包含浮点数 Float Double

标签: 涤纶myla电容

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

 锐单商城 - 一站式电子元器件采购平台  

 深圳锐单电子有限公司