Three things about this book make it a novelty among lens tutorials:
- Explanations are driven not by lens types, but by the types of data you want to use lenses on. Consider Maps. Most lens tutorials don't cover them. (I'm not sure I've found any that do.) Once you've learned lenses well, it's relatively easy to deduce how to use them with Maps. But if you try to use lenses on Maps before then, you will suffer. Which seems wrong, given how common Maps are in code. So this book covers them in chapter 2.
- I wrote the book as I was learning lenses and applying them to my own code. That gives me a better idea of what novices will stumble over (Maps! Error messages!) and allows me to introduce topics in something like a "just in time" order. To the best of my ability, the book represents what I'd have wished my learning experience to be: answers coming just as I was getting puzzled, answers that don't overwhelm me with completeness or detail I'm unprepared for, and so on. This isn't the first time I've written in this style, and it turns out that my ideal learning journey works for other people.
- It's a book. That means it can take its time. It doesn't have to leave things for you to figure out from API documentation.
There are other differences, but I'll leave them to the Introduction.
The book uses a PureScript version of lenses because I happened to be learning PureScript when I got the idea of writing it. I hope it's still useful for people wanting to learn the Haskell version. (The two APIs are very similar, though the underlying implementations differ in some important ways.)
I assume only shallow knowledge of PureScript, roughly equivalent to the three post-Elm introductory chapters in An Outsider's Guide to Statically Typed Functional Programming.