《Haskell趣學指南》讀書筆記(2):Type And Typeclass
前言:Haskell同python類似,支援型別推導,不需要額外告知資料型別。現在我們將理解haskell的型別系統
Type相關
|| :t 命令
檢測表示式的型別
Prelude> :t "aaa"
"aaa" :: [Char]
(tip: " :: " 讀作 “它的型別”)
下面我們研究 符號 —> ::
|| “ :: ” 用於函式型別宣告
mylast :: [a] ->a --型別宣告
mylast[] = error"empty list"
mylast [x] = x
mylast (x:xs) = mylast xs
--多個引數
myadd :: int -> int -> int
myadd x y z = x + y + z
|| 基本資料型別
Char / Int / Float / Double / Bool (型別首字母需大寫)
|| 函式的資料型別
注意: 其中的 ‘a’ 不是一個資料型別,而是一個變數, 在haskell中變數可以是任意的型別 !
*Main> :t head
head :: [a] -> a
*Main> :t init
init :: [a] -> [a]
*Main> :t fst
fst :: (a, b) -> a
注意: 使用到型別變數為引數的函式被稱為“多型函式”,可以接收熱議型別的List
Typeclasses 相關
型別類
--檢視 函式 == 的型別宣告是怎樣的
*Main> :t (==)
(==) :: Eq a => a -> a -> Bool
*Main> :t (>)
(>) :: Ord a => a -> a -> Bool
(*) :: Num a => a -> a -> a
*Main> :t (+)
(+) :: Num a => a -> a -> a
*Main> :t (-)
(-) :: Num a => a -> a -> a
*Main> :t (*)
(*) :: Num a => a -> a -> a
*Main> :t (/)
(/) :: Fractional a => a -> a -> a
下面我們研究 符號 —> =>
|| => 左邊的部分稱為型別約束,(由 前文知,變數a原本可以是任意型別,現在被約束)
針對Eq a => a -> a -> Bool
我們可以解讀為:“相等函式取兩個相同型別的值作為引數並回傳一個Bool值,而這兩個引數的型別在Eq這個類中(Eq對函式進行了型別的約束)”
|| 基本的Typeclass:
||| Eq 包含可判斷相等性的型別。 == 、/= ( 除函式外所有的型別都屬於Eq,故只有函式不能判斷相等性)
||| Ord 包含可比較大小的型別 > < >= <= ( 除函式外所有的型別都屬於Ord,故只有函式不能進行大小比較)
注意: 一個型別若是Ord型別,則必先是Eq型別
||| Show 包含可用字串表示的型別 ‘show a’ ( 除函式外所有的型別都屬於Show,故只有函式不能用字串表示)
*Main> show 11
"11"
||| Read 包含可以由一個字串轉而成的其他的型別 read “a” (所有的型別都屬於Read)
--read可以將字串轉化為Read中某型別
*Main> read "123" + 1
124
--報錯 read不知道具體轉換為哪個型別
*Main> *Main> read "123"
<interactive>:11:1: error: parse error on input ‘*’
Enum 包含可列舉的型別(也就是連續的型別) Bool,Char,Ordering, Int, Integer,Float,Double
Bounded 包含有一個上限和一個下限的型別 Int Char Bool
Num 是表示數字(整數和實數)的Typeclass,它的成員型別有數字特徵
Integral 包含整數 Int Integer
Floating 包含浮點數 Float Double
相關文章
- 《Haskell趣學指南》筆記之型別(type)Haskell筆記型別
- 《Haskell趣學指南》筆記之模組Haskell筆記
- 《Haskell趣學指南》筆記之函式Haskell筆記函式
- 《Haskell趣學指南》筆記之 MonoidHaskell筆記Mono
- 《Haskell趣學指南》筆記之 MonadHaskell筆記
- 《Haskell趣學指南》筆記之基本語法Haskell筆記
- Haskell趣學指南Haskell
- 《Haskell趣學指南》筆記之 Applicative 函子Haskell筆記APP
- 《Haskell趣學指南》筆記之自定義型別Haskell筆記型別
- 讀書筆記2筆記
- FPGA讀書筆記2FPGA筆記
- 《Git權威指南》讀書筆記Git筆記
- Effective Java 讀書筆記(2)Java筆記
- 讀書筆記【2】 初探Storyboard筆記
- 讀書筆記(2)《微精通》筆記
- 《學習之道》讀書筆記筆記
- 《Node.js開發指南》讀書筆記Node.js筆記
- 《IBM BPM實戰指南》讀書筆記IBM筆記
- 《IDA Pro權威指南》讀書筆記筆記
- javascript權威指南閱讀筆記2JavaScript筆記
- 怪誕心理學讀書筆記筆記
- 《如何高效學習》讀書筆記筆記
- 《具體數學》讀書筆記筆記
- 讀書筆記】《PostgreSQL指南-內幕探索》-2.程式和記憶體架構筆記SQL記憶體架構
- 《HTTP/2 基礎教程》 讀書筆記HTTP筆記
- 《禪者的初心》讀書筆記(2)筆記
- 讀書筆記...筆記
- 讀書筆記筆記
- 《JavaScript 學習指南》閱讀筆記(一)JavaScript筆記
- 《讀書與做人》讀書筆記筆記
- 程式設計師生存指南讀書筆記-第三篇(學習)程式設計師筆記
- 《數學之美》讀書筆記&思考筆記
- [讀書筆記]跟阿銘學Linux筆記Linux
- 深度學習讀書筆記之RBM深度學習筆記
- 我的《機器學習實戰》讀書筆記(2)機器學習筆記
- 【《TOP》讀書筆記】<2> Key Concepts筆記
- 轉載大師的讀書筆記 2筆記
- <轉>oracle效能調整讀書筆記(2)Oracle筆記