类型、类型变量、多态函数

发布时间 2023-04-01 15:04:06作者: 牧羊龟

类型

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的功能要强大的多
因为它允许我们轻松定义一般的函数,只要我们不使用任何特定的类型
具有类型变量的函数称为多态函数