Generic Programs and Proofs - Hinze, R (2000)