我在 Haskell 中有一個自定義資料型別。我有一個自定義型別,稍后我想從中獲取一個屬性并輸出它。在 Java 中,我只會使用 . (dot) 運算子,但是這在 Haskell 中不起作用。我該怎么做呢?
這是我現在擁有的代碼
data Person = P Name Address
type Name = String
type Address = String
x :: Person
x = (P "abc" "def")
y :: Name
y = x.Name
main :: IO ()
main = putStrLn $ "The name is: " y
uj5u.com熱心網友回復:
您可以使用模式匹配:
y = case x of P name _ -> name
y = name where P name _ = x
y = let P name _ = x in name
您可以撰寫一個欄位訪問器函式:
name (P n _) = n
y = name x
評論中的建議y = (\(P name _) -> name) x基本上是這樣做的;上面的定義name是語法糖
name = \(P n _) -> n
一旦它的定義被行內,它就會從評論中給出解決方案。
或者您可以使用記錄語法重新定義您的型別并讓編譯器撰寫您的訪問器:
data Person = P
{ name :: Name
, address :: Address
}
y = name x
實際上,如果你這樣做,我想我可能會省略型別別名。
data Person = P
{ name :: String
, address :: String
}
他們只是在重復欄位名稱中已有的資訊,實際上并沒有給你買太多;例如,編譯器不會阻止您意外讀取一個人的名字并將其存盤在另一個人的地址中。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/462857.html
標籤:哈斯克尔
上一篇:狀態機的索引單子
下一篇:簡化太長的Haskell函式
