http://martin.zinkevich.org/rules_of_ml/rules_of_ml.pdf
https://en.wikipedia.org/wiki/Functional_programming