begin to understand lots of operation on List can be implemented with foldLeft or foldRight