「Haskell 学习」二 类型和函数(上)

随着学习的深入,笔记会补充和修订。当然,这个补充修订也许会鸽,但我一定会坚持写完。
这个笔记假定你至少学过C/C++及Python,或与这两种语言类型相同的语言。

类型系统概述

“Haskell’s type system allows us to think at a very abstract level: it permits us to write concise, powerful programs.”
简单地说,Haskell拥有一个强、静态、自动推断的类型系统。Haskell的强同C/C++的区别体现在它不会隐式类型转换。比如,对一个取float参数的函数以int,C/C++就这么给过去了,但是Haskell会报错,必须要手动类型转换。静态类型的意思是编译器在编译时就知道表达式/变量的类型,如果不匹配就会报错。如:

# zuiho @ zuiho-pc in ~ [Time]
$ ghci
GHCi, version 8.0.2: http://www.haskell.org/ghc/  :? for help
Prelude> :set prompt "ghci> "
ghci> True && "false"

<interactive>:2:9: error:
    • Couldn't match expected type ‘Bool’ with actual type ‘[Char]’
    • In the second argument of ‘(&&)’, namely ‘"false"In the expression: True && "false"
      In an equation for ‘it’: it = True && "false"
ghci>

问题出现在&&操作符上。第一章的笔记里提到过,逻辑与操作符要求两个参数都为Bool类型。尽管看起来很严格,但是用原文的话,“Haskell has some support for programming with truly dynamic types, though it is not quite as easy as in a language that wholeheartedly embraces the notion.”
最后就是自动推断。编译器会推断大多数表达式的类型,但是你也可以钦定某些变量(或者更准确地说,声明变量)的类型。

基础类型

常用的有Char、Bool、Int、Integer、Double等。需要注意的是,Char存放的是一个Unicode字符,Int被确保大于 228

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值