類型
Haskell有強大的類型系統
- 每個表達式在編譯時都會明確類型,因此可以有更多的信息來檢查錯誤。
- 支持類型推導。
Prelude> :t True
True :: Bool
Prelude> :t 'a'
'a' :: Char
Prelude> :t "hi"
"hi" :: [Char]
Prelude> :t (True, 'a')
(True, 'a') :: (Bool, Char)
Prelude> :t (True, "ss")
(True, "ss") :: (Bool, [Char])
Prelude> :t 4==5
4==5 :: Bool
::
讀作: “它的類型爲”
4 == 5 :: Bool
讀作4==5 它的類型爲 Bool
Prelude> :t cycle
cycle :: [a] -> [a]
函數也有類型, "[a] -> [a]"表示入參爲[a],返回值爲[a]。 多個入參一樣是通過“->”連接,最後一個表示返回值。
注意:凡是明確的類型,其首字母必定是大寫。
常見類型
- Int 有界整數 範圍2的-63次方~2的63次方-1
- Integer 無界整數 可以存放非常大的整數,但效率不如Int高。
- Float 單精度浮點數
- Double 雙精度浮點數
- Bool 布爾值
- Char 表示一個Unicode字符
- 元祖 也是類型,不過它的類型取決於其中項的類型以及數目。理論上可以有無限種類型,實際上元祖最大項的數量爲62。 另外注意空元祖也是一種類型,只有一種值,即().
類型類
類型類是一組函數的集合,定義行爲的接口。如果一個類型是某種類型類的實例,那麼他必須實現了該類型了所描述的行爲。
- Eq類型類
- Ord類型類
- Show類型類
- Read類型類
- Enum類型類
- Bounded類型類
- Num類型類
- Floating類型類
- Integeral類型類