對Discrete Mathematics Using a Computer的第一章Introduction to Haskell進行總結。環境Windows。
2020.3.13 更新:COMP90048 Declarative Programming 又繼續學習了Haskell。
類型別名 type synonym
作用和C中的typedef差不多,形式如:
type Message = (String, Int)
首字母大寫。
自定義數據類型 data type definitions
形式如:
data Colour = Red | Orange | Yellow | Green | Blue | Violet
Colour type包含了Red Orange Yellow Green Blue Violet這些值,這些值是constructor,其開頭字母要大寫。
還有包含類型變量type variables的形式data constructors:
data Point = Pt Float Float --這里Pt就是data constructor,更通常的是把type和data constructor寫成一樣的,即data Point = Point Float Float
為type指定默認類型在末尾deriving
data MyBool = MyTrue | MyFalse
deriving (Eq, Show)
如果要為type指定自定義類型,則要單獨定義,如:
自定義類型類 type class
從 + 操作說起,+可以作用於許多類型如整形和浮點型等,其得出的結果類型也不是單一的,這就有個問題:+的類型是什么?如果是(+) :: Integer -> Integer -> Integer的話,則當浮點數相加時是不符合的,而如果是(+) :: a -> a -> a就意味着任何類型都適用,如True + False,這也不對,我們想要的是當類型是數字numeric時適用,實際上(+)的定義為:
(+) :: Num a => a -> a -> a
Num是類型類type class,Num包括Int, Integer, Float, Double等類型。Num a =>稱為類限制(class constraint or context),表示只有當參數的類型是屬於Num時(+)才適用。除了Num還有其他的type class:
Ord用於比較
Haskell允許自定義類型類,常用的類型類有Num, Show, Eq。Num表示該類是數字numeric,Show表示可轉換成字符串,Eq表示可用於比較是否相等。
Type Constructors
data List a = ListNode a (List a) | ListEnd
Maybe