Notes:
Purity allows memoization
Monads are the ghettos where unpure functions are kept