
mapPair :: (a -> c, b -> d) -> (a, b) -> (c, d) mapFst :: (a -> c) -> (a, b) -> (c, b) mapSnd :: (b -> c) -> (a, b) -> (a, c)
These three could be replaced by a more general (and often defined) bifunctor class class Bifunctor f where bimap :: (a -> c) -> (b -> d) -> f a b -> f c d mapFst :: (a -> c) -> f a b -> f c b -- or mapL mapSnd :: (b -> d) -> f a b -> f a d -- or mapR This class also has a useful instance for Either in Base.
fst3 :: (a, b, c) -> a snd3 :: (a, b, c) -> b thd3 :: (a, b, c) -> c
This naming scheme for extractors from pairs (then triples) doesn't really extend to 4 tuples or higher, maybe a rethink is useful before a commit to the Base libraries. Of the top of my head, fst and snd are the only bits of "vowel dropping" as a naming scheme I can think of in Base, maybe it is not a tradition to continue, though SML has a few more like hd and tl.