Functional Programming for the Dysfunctional Programmer