访问数据类型的属性

时间:2018-05-06 15:37:05

标签: haskell

我创建了一个新的数据类型:

data Human = Human [Names] Age
  deriving(Eq,Show)
type Names = String
type Age = Int

现在我想访问Human类型对象的[Names]元素:

human1 = Human ["FirstName","LastName"] 22

是否有一种简单的方法可以为我的示例执行此操作,例如Names human1

2 个答案:

答案 0 :(得分:5)

在这种情况下,最简单的方法是定义一个函数,该模式匹配Human数据类型:

getNames (Human names _) = names

否则,您可以使用“记录语法”来定义记录的字段:

data Human = Human { names :: [Names], age :: Age }

使用此语法,您可以获得namesage个函数,这些函数允许您访问字段:

human1 = Human ["FirstName","LastName"] 22
names human1

答案 1 :(得分:4)

您可以创建自己的访问者

names :: Human -> [Names]
names (Human n _) = n

或使用镜头,这样可以提供更多功能。
http://hackage.haskell.org/package/lens-tutorial-1.0.3/docs/Control-Lens-Tutorial.html