Нет предопределенных функций, таких как fst
или snd
для кортежей с более чем двумя элементами. Как вы сказали, вы можете использовать сопоставление с образцом и подстановочный знак _
для выполнения этой работы.
cars = [ ("Foo", ["x", "y"], 2009, ["ab", "cd"]
, ("Bar", ["z"], 1997, [])
]
newCars = filter condition cars
where condition (_, _, n, _) = n > 2005
Однако обычно это признак того, что вы должны перейти от использования кортежей к типу записи.
data Car = Car { model :: String
, foo :: [String]
, year :: Int
, bar :: [String]
}
cars = [ Car "Foo" ["x", "y"] 2009 ["ab", "cd"]
, Car "Bar" ["z"] 1997 []
]
Теперь вы можете использовать model
, foo
, year
и bar
, как если бы вы использовали fst
и snd
для кортежей.
newCars = filter ((> 2005) . year) cars