从自定义数据类型获取值



我在Haskell中有一个自定义数据类型。我有一个自定义类型,稍后我想从中获取一个属性并输出它。(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

您可以使用模式匹配:

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
}

它们只是重复字段名称中已有的信息,实际上并没有给你带来多少好处;例如,编译器不会防止您意外地从一个人身上读取一个名字并将其存储在另一个人的地址中。

最新更新