Thinking Functionally with Haskell by Richard Bird https://www.cambridge.org/core/books/thinking-functionally-with-haskell/79F91D976F0C7229082325B41824EBBC