List 打印数据类型-Haskell

List 打印数据类型-Haskell,list,haskell,List,Haskell,我正在寻找多种打印人员列表中每个元素的名字的方法 打印这些元素可以打印为以下形式: x1,x2,x3,…xn [x1,x2,x3,…xn] 多行: data Person = Person { firstName :: String , lastName :: String , age :: Int } deriving (Show) buffy = Person

我正在寻找多种打印
人员
列表中每个元素的
名字的方法

打印这些元素可以打印为以下形式:

  • x1,x2,x3,…xn
  • [x1,x2,x3,…xn]

  • 多行:

    data Person = Person { firstName :: String
                         , lastName :: String
                         , age :: Int
                         } deriving (Show)
    
    
    buffy = Person "Buffy" "Summers" 22
    burt = Person "Burt" "Reynolds" 23
    cloud = Person "Cloud" "Strife" 22
    rick = Person "Rick" "Sanchez" 21
    
    people = [buffy,burt,cloud,rick]
    

如果您创建一个类似于
Person
的记录类型,您将获得以下字段选择器:

x1  
x2   
x3   
...  
xn
因此,您可以将名字映射到列表上,将您的
[Person]
转换为
[String]


因此,打印
firstName
s仅仅是
mapM(putStrLn.firstName)people
如果您创建一个类似
Person
的记录类型,您将获得以下字段选择器:

x1  
x2   
x3   
...  
xn
因此,您可以将名字映射到列表上,将您的
[Person]
转换为
[String]


那么,打印
firstName
s仅仅是
mapM(putStrLn.firstName)人

这是否意味着我必须去掉数据结构中的属性,让它读取data Person=Person String String Int?不,我的意思是如果你像你在问题中那样定义
Person
,从中(“免费”)可以获得的一个功能是选择器函数
firstName
。您不需要(事实上,由于命名冲突,您不能)自己定义
firstName
、函数(如果您已经有
firstName
)字段。这是否意味着我必须去掉数据结构中的属性,只让它读取data Person=Person String Int?不,我的意思是,如果你像在你的问题中那样定义
Person
,你从中得到的(“免费”)是选择器函数
firstName
。您不需要(事实上,由于命名冲突,您无法)定义
firstName
、函数,如果您已经有
firstName
、字段。您说您正在寻找“多种方法”-这些不同的方法应该有什么不同?他们是否应该以不同的方式打印每个元素?一种方法是
mapM_uuu打印人员
,另一种方法是
sequence_uuu(map打印人员)
,这算不算两种不同的方法?是的,我只是想看看Haskell中打印数据类型的不同方法。你说你在寻找“多种方法”-这些不同的方法应该有什么不同?他们是否应该以不同的方式打印每个元素?一种方法是
mapM_uuu打印人员
,另一种方法是
sequence_uuu(map打印人员)
,这算不算两种不同的方法?是的,我只是想看看Haskell中打印数据类型的不同方法。