Functional Programming with Bananas, Lenses, Envelopes and Barbed Wire
Views: a way for pattern matching to cohabit with data abstraction