Algebra of Programming by Richard Bird and Oege de Moor, Prentice Hall, 1996 (dated 1997).