Notions of Computation as Monoids ( extended version )
Functional Programming with Bananas, Lenses, Envelopes and Barbed Wire