The Science of Functional Programming