1. 程式人生 > >初識Haskell 五:自定義數據類型和類型類

初識Haskell 五:自定義數據類型和類型類

context ima 轉換 ext 定義類 初識 ask spa text

Discrete Mathematics Using a Computer的第一章Introduction to Haskell進行總結。環境Windows


自定義數據類型 data type definitions

  形式如:

    data Colour = Red | Orange | Yellow | Green | Blue | Violet

  Colour type包含了Red Orange Yellow Green Blue Violet這些值,這些值是constructor,其開頭字母要大寫。

  還有包含類型變量type variables的形式:

  data Animal a b = Cat a | Dog b | Rat

  自定義類型數據可用於當計算沒有結果會導致程序出錯時,可定義一個值作為當不存在結果時的答案。要打印自定義類型的值要在定義時加deriving Show,如:

  data Colour = Red | Orange | Yellow | Green | Blue | Violet deriving Show。

自定義類型類 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時(+)才適用。

  Haskell允許自定義類型類(如何定義這本書因不涉及沒講),常用的類型類有Num, Show, Eq。Num表示該類是數字numeric,Show表示可轉換成字符串,Eq表示可用於比較是否相等。

初識Haskell 五:自定義數據類型和類型類