Alas, all adventures must come to an end. In this final instalment of my incremental review of Julie and Chris' book I take some time to reflect on the entire book and give a holistic review.
Overall I feel like Haskell Programming from First Principles is an exceptional training ground for methodical and logical problem solving. There are many places where you can do that kind of thing, but I feel like this book really drives a methodical approach home and rewards the reader repeatedly for following it.
I personally found the latter third of the book quite challenging, but realistically it was because that part of the book covered topics where no other Haskell book had successfully sunk in for me. It wasn't challenging in that I got stuck, it was challenging in that the chapters took more time for me to absorb than the earlier chapters. My professional life expanded to absorb a lot more of my learning time meaning I had greater pauses between HaskellBook sessions as well.
All told I made it through and I have substantially more confident in my Haskell skills than I was coming in. I feel that I get why and how things work much better now which gives me greater confidence in building systems with Haskell than I had before.
Real gems in the latter part of the book include the Monads chapter which, given the great progression and preparation of previous chapters, wasn't as much an "aha" moment as an "oh, of course, that's the only way it can be" moment. Haskell is much less arcane than it seems and really much less arcane than other programming systems that expect you to ignore the proverbial man behind the curtain.
Another great thing specifically in my interest given professional applications I've made with Haskell is the Parser combinators chapter. Realizing that you could write general parsers and switch libraries to get more detailed and friendly parsing failure messages has substantially improved my productivity with parsing. Trifecta is a great tool for that purpose and the chapters examples really drive how to see and get quickly off sad paths in parsing.
Both the depth and clarity of discussion on non-strictness and the nature of how IO works in GHC were very informative. I kind of got these topics, but the explanations, examples, and exercises provided really helped me understand these topics. I might not often need to deal with the details here, but I know that when I do I'll be reaching back to these chapters to refresh.
I have to hand it to Chris and Julie for delivering an exceptional teaching book that really goes beyond Haskell basics into providing a path for programmers to enter the ranks of intermediate Haskell. Very few single programming books achieve this depth without being overwhelming which makes this a serious achievement both in writing and teaching.
Thank you Julie and Chris for Haskell Programming from First Principles. I enjoyed it thoroughly.