记录构造函数的语法

时间:2013-08-09 08:18:39

标签: haskell

我想知道为什么会这样做

data Person = PersonContructor {
  firstName :: String,
  lastName :: String,
  age :: Int
} deriving (Show)

main = putStrLn $ show $ map (PersonContructor "firstName1" "lastName1") [666, 999]

这并不是

data Person = PersonContructor {
  firstName :: String,
  lastName :: String,
  age :: Int
} deriving (Show)

main = putStrLn $ show $ map (PersonContructor {firstName="firstName1", lastName="lastName1"}) [666, 999]

我该如何解决?

1 个答案:

答案 0 :(得分:6)

虽然构造函数通常像curried函数一样,所以你可以像在第一个例子中那样部分地应用它们,记录语法构造想要构建一个没有字段的完整记录。

如果您想为字段命名,可以使用lambda:

map (\age -> PersonContructor {firstName="firstName1", lastName="lastName1", age=age}) [666, 999]