Generic Functional Programming with Types and Relations - Bird, R; de Moor, O; Hoogendijk, P (1996)