具有记录参数的自定义数据类型
假设我们要创建一个数据类型 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