www.haskell.org/haskellwiki/99_questions/11_to_20