Haskell入門(二):型別(Type)
python入門程式設計, 之後用c++學習資料結構,Haskell萌新。
參考教材 :Learn You a Haskell for Great Good (http://learnyouahaskell.com/)
操作環境 :Ubuntu下Linux64位虛擬機器
Chapter2 部分內容
常見的型別( Types )及特點
Int :整型,常見的 其範圍由機器位數決定。書中說64位下是-2^63 ~ 2 ^63 (不過此處存疑,可能下界要+1?)
Integer : 沒有上下界的整型
Float :單精度實數型(如果沒記錯是十進位制的6位左右)
Double :雙精度實數型
Bool : 布林型,只有True 和 False 兩種取值
Char : 單個Unicode 字元,使用時需要單引號(字串用雙引號,這一點與c++類似)
除了上面提到的以外,還有複合型別List 和Tuple。其中List型別由其中元素的型別決定,Tuple的型別由每一個元素的型別及元素個數決定。
需要注意的是, Haskell中所有的型別名首字母都大寫。
檢視物件型別
在Haskell裡,使用:t object 來檢視物件的型別。返回 object :: Type 。其中,雙冒號表示 has type of (型別為)。
以下是常見物件的型別。對於[ ] 這種元素型別不確定的,返回 [ a ] 。(這可以與後面函式部分聯絡起來)

常見物件型別
函式型別宣告(type declaration)
使用 函式名::輸入引數1型別->輸入引數2型別->... ->輸入引數n型別 -> 返回值型別

函式示例
函式型別變數(type variables)
我們有時希望函式具有更廣泛的使用,能對一系列型別的輸入進行處理。因而有了函式型別變數。它的功能類似於c++裡的template 模板函式,不過寫法更加方便。通常使用a, b, c, d等單個小寫字母表示型別變數。我們可以通過:t檢視內部一些函式的宣告。

一些函式的宣告
型別的類限制(class constraint)
有時我們希望對上面提到的型別變數加一些條件,希望輸入的型別具有特定的性質。具有某些特定性質的型別們在一起組成了一個類,而我們使用=>對類加以限制。
這裡的類與c++,python中的有區別,更多的是指某個型別具有某種特定的性質,因而一個型別可以從屬於多個類,一個類也可以包含多個型別。當然,類之間也存在包含關係(與繼承類似,但也有區別)
常見的類有:
Eq(可判斷元素是否相同)
Ord(元素可比較大小、優先順序關係)
Enum(元素以一定次序排列)
Show(元素可以以String形式輸出)
Read(元素可以由String轉化而來的。使用時可以使用::來限制轉化而來的類的型別)
Bounded(元素有上下界(minBound, maxBound))
Num: 元素有數字型別。(Int, Integer, Float, Double都是)
Floating: 元素是浮點型別(Float, Double)
Integral: 元素是整數型別。(Int, Integer)