Learn Haskell abstractions the easy way — with real-world examples and context. You'll learn common patterns in Haskell, how to implement them yourself, and what their benefits and drawbacks are.
This short book is meant for anyone who already has a basic working understanding of Haskell, but is looking for intermediate-level knowledge.
The book contains a review of several design patterns taken from a dozen of common Haskell libraries. I think it's a good overview of architectural approaches for building expressive library APIs in Haskell; if you can call "monoid" a pattern, but why not? There are also reminders that you don't have to apply as many patterns as possible in every case because they may not be applicable or make your API more complicated (e.g. by adding type-level constraints). The book is pretty short and to the point; it is helpful for folks who are new to Haskell and have never created libraries yet. I am impressed by the example reimplementation of `conduit` and `servant` libraries in the book; they don't look that complicated now (of course, when everything is already explained in the book).