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?
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]
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With