Adding swap/compose functions to Data.Tuple and Data.Function

John Wiegley johnw at
Tue Nov 20 20:14:57 CET 2012

Moving discussion from

I propose adding the following three functions to Data.Tuple and
Data.Function, respectively:

    swap :: (a,b) -> (b,a)
    swap = snd &&& fst

Fairly obvious, but strangely missing.

    compose :: [(a -> a)] -> a -> a
    compose = foldr (.) id

    composeM :: [(a -> m a)] -> a -> m a
    composeM = foldr (<=<) return

This can be done with Endo, of course, but the result is awkward. The idiom of
composing a list of endomorphisms occurs often enough that you can Google for

John Wiegley
FP Complete                         Haskell tools, training and consulting               johnw on #haskell/

More information about the Libraries mailing list