The Magical World of Functional Programming