类型
Haskell有一个静态类型系统,每个表达式的类型在编译时是已知的,这将产生更安全的代码
与Java或C不同,Haskell有类型推断,不用显式编写类型
理解类型系统是掌握Haskell的一个非常重要的部分
:type命令可以检查表达式的类型,如下
:type 'a'
:type True
:type "hello"
:type (True, 'a')
:type 4 == 5
常见的类型如下
- Int 表示整数,有界,有最大值和最小值
- Integer 表示整数,无界
- Float
- Double
- Bool
- Char 表示一个字符,字符列表是一个String字符串
函数也有类型,当我们编写函数时,可以在它们的声明中给它们一个显式类型,这是很好的,如下
removeNoUpper :: [Char] -> [Char]
remobeNoUpper xs = [x | x <- xs, x `elem' ['A' .. 'Z']]
[Char]类型与String同义,因此可以更优雅的写成
removeNoUpper :: String -> String
多个参数时,参数之间用 -> 分隔,参数和函数返回的类型之间没有特殊区别,函数返回的类型是声明的最后一个元素,参数是剩下的部分,如下
addThree :: Int -> Int -> Int -> Int
addThree x y z = x + y + z
类型变量 多态函数
如下
:type head
head :: [a] -> a
类型变量意味着a可以是任何类型,它类似于其他语言的泛型类型,只是在Hadkell的功能要强大的多
因为它允许我们轻松定义一般的函数,只要我们不使用任何特定的类型
具有类型变量的函数称为多态函数