Higher rank types look like great fun. From the Haskell wikibook comes this example:
foo :: (forall a. a -> a) -> (Char,Bool) foo f = (f \'c\', f True) >
foo :: (forall a. a -> a) -> (Char,Bool) foo f = (f \'c\', f True)
Recently somebody asked a question here on Stack Overflow which could be solved with higher-rank types.
Another application is in the Scrap Your Boilerplate paper.