Extended Prelude to Programming: Concepts and Design (2nd Edition)