There are no predefined functions, such as fstor sndfor tuples with more than two elements. As you said, you can use pattern matching and a wild card _to complete the task.
cars = [ ("Foo", ["x", "y"], 2009, ["ab", "cd"]
, ("Bar", ["z"], 1997, [])
]
newCars = filter condition cars
where condition (_, _, n, _) = n > 2005
However, this usually means that you must switch from using tuples to a record type.
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