具有記錄引數的自定義資料型別
假設我們要建立一個資料型別 Person,它有姓名,年齡,電話號碼,街道,郵政編碼和城鎮。
我們可以寫
data Person = Person String String Int Int String String String
如果我們現在想獲得電話號碼,我們需要提供一個功能
getPhone::Person -> Int
getPhone (Person _ _ _ phone _ _ _) = phone
嗯,這不好玩。我們可以使用引數做得更好:
data Person' = Person' { firstName :: String
, lastName :: String
, age :: Int
, phone :: Int
, street :: String
, code :: String
, town :: String }
現在我們得到函式 phone
在哪裡
:t phone
phone::Person' -> Int
我們現在可以做任何我們想做的事,例如:
printPhone::Person' -> IO ()
printPhone = putStrLn . show . phone
我們還可以通過模式匹配來繫結電話號碼 :
getPhone' :: Person' -> Int
getPhone' (Person {phone = p}) = p
為便於使用引數,請參閱 RecordWildCards