Reputation: 26008
I wonder why does this work
data Person = PersonContructor {
firstName :: String,
lastName :: String,
age :: Int
} deriving (Show)
main = putStrLn $ show $ map (PersonContructor "firstName1" "lastName1") [666, 999]
and this doesn't
data Person = PersonContructor {
firstName :: String,
lastName :: String,
age :: Int
} deriving (Show)
main = putStrLn $ show $ map (PersonContructor {firstName="firstName1", lastName="lastName1"}) [666, 999]
and how do I fix it?
Upvotes: 5
Views: 1141
Reputation: 3805
While Constructors act like curried functions in general, so you can partially apply them as in your first example, the record syntax constructing wants to construct a complete record with no fields left out.
If you want to name the fields nevertheless, you can use a lambda:
map (\age -> PersonContructor {firstName="firstName1", lastName="lastName1", age=age}) [666, 999]
Upvotes: 8