Functional programming (FP) is based on a simple premise with far-reaching
implications: We construct our programs using only pure functions. In other words,
functions that have no side effects. What does this mean exactly? Performing any
of the following actions directly would involve a side effect:
* Reassigning a variable
* Modifying a data structure in place
* Setting a field on an object
* Throwing an exception or halting with an error
* Printing to the console or reading user input
* Reading from or writing to a file
* Drawing on the screen