What, in the end, distinguishes the functional programmer from the OO developer? Much effort is spent on arguing how FP is more efficient. More significant, however, is that functional programmers produce different models from their OO and relational counterparts, which enable more powerful software architecture. The talk traces this observation through 13 years of functional programming applied in industrial projects, in a variety of languages. I'll touch on projects in stage lighting (""stage lighting has algebraic structure""), financial derivatives (""market data is compositional""), semiconductor manufacturing (""hope is a monad"", ""scheduling is an arrow""), social pedagogy (""the GUI is a function""), and others, as time permits.
While a number of lessons from these experiences may seem obvious, they were hard-won:
- purely functional is better
- look for compositionality
- monads can be found in unexpected places
(Not among them: Static types are better.)