列表列表包含以下条目。
[
["John","Doe","38\r"],
["Jane","Doe","35\r"]
]
Person数据类型的构造如下:
data Person = Person { firstName :: String
, lastName :: String
, age :: Int
} deriving (Show)
我正在尝试在Haskell中列出人员列表,以便最终的人员列表如下所示:
[
Person {firstName = "John", lastName = "Doe", age = 38},
Person {firstName = "Jane", lastName = "Doe", age = 35}
]
感谢您的帮助!请谢谢!
答案 0 :(得分:0)
所以我们需要这种类型的函数:
f :: [[String]] -> [Person]
有一个功能可以帮助我们-map
stringsToPerson :: [String] -> Person
f = map stringsToPerson
现在,一个基本问题变得很清楚了-stringsToPerson
不是类型安全的。用户可以给它一个空列表,该函数别无选择,只能返回一个错误。更好的类型是:
stringsToPerson :: (String, String, Int) -> Person
stringsToPerson :: [String] -> Maybe Person
Buuut假设您要坚持选择的类型,则可以通过模式匹配来实现:
stringsToPerson [firstName, lastName, age] = Person firstName lastName (read age)
答案 1 :(得分:0)
您可以执行以下操作;
data Person = Person { firstName :: String
, lastName :: String
, age :: Int
} deriving (Show)
mapper :: [[String]] -> [Person]
mapper = map makePerson
where makePerson [f,l,a] = Person f l $ read a
*Main> mapper [["John","Doe","38\r"], ["Jane","Doe","35\r"]]
[Person {firstName = "John", lastName = "Doe", age = 38},Person {firstName = "Jane", lastName = "Doe", age = 35}]