haskell学习笔记(3)-Types and Typeclasses

haskell是静态类型加类型推导,现在静态类型中的类型推导现在也越来越常见了,其实确实只看值就知道是什么类型了,写上类型反而使代码看的混乱。

haskell里的函数也是有类型的,其实也就和c/c++的函数指针差不多,需要申明输入什么类型,输出什么类型,才能指向某个函数,haskell也就是换个语法而已。

可以在ghci 里使用:t来查询值以及函数的类型

#这个意思就是==函数 接受两个Eq类型,返回bool值,eq类型可以看做java里的comparable接口,不过这个没法判断大小,只能是判断相等不相等
#刚开始看他这个输出的比较奇怪,为什么输入值返回值都是用->,不过因为haskell是单返回值,返回值类型一定是写在最后面,也没有歧义,多看看就习惯了
ghci> :t (==)
(==) :: (Eq a) => a -> a -> Bool

几个基本的类型(或者说接口?不过haskell里没有接口这种说法,可能更像动态语言例如ruby里的duck类型)

Eq 包含可判断相等性的类型。提供实现的函数是 == 和 /=。所以,只
要一个函数有 Eq 类的类型限制,那么它就必定在定义中用到了 == 和 /=。
刚才说了,除函数以外的所有类型都属于 Eq,所以它们都可以判断相等性。
Ord 包含可比较大小的类型。除了函数以外,我们目前所谈到的所有类型都属于 Ord 类。Ord 包中包含了 <, >, <=, >= 之类用于比较大小的函数。compare 函数取两个 Ord 类中的相同类型的值作参数,返回比较的结果。这个结果是如下三种类型之一:GT, LT, EQ。


因为类型推导在缺乏上下文的情况下没有办法推出某些类型,一旦遇到这种情况,必须用另外的语法来说明类型

例如read函数,读取一段字符串当做表达式执行然后返回值,类似js,as3等动态语言的eval()函数,不过haskell是静态语言,所以必须要给返回值声明类型

#说明返回值是Int
read "5" ::Int
#说明返回值是Int数组
read "[1,2,3,4]" :: [Int]
#:: type就类似别的语言里的强制转换,例如c的(int)

欢迎关注我的github https://github.com/luckyCatMiao

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值