Gibbons. Design Patterns as Higher-order Datatype-generic Programs. ACM Press, 2006, doi:10.1145/1159861.1159863.