Functional Programming Made Easy with Analogies