I had been trying to "learn" Haskell for around 3 years or so, now. Where "learn" means _write code complex enough to get a glimpse of most functionality, understanding enough of the build and develop system so I can become confident with it on my own". I had tried Sutton's book, LYaHFGG and many others, and it had always eluded me.
This book finally made it stick, with one very good helper: I finally got ghcide working and that is a game changer. Now, I feel confident I can start writing some Haskell for my own personal projects and figure it out on my own. Note that I started this book last year, but re-started it 4 days ago. It just needs 7-8 hours or so if you have access to a computer where you can read and code at the same time.
In the book you are going to write very simple code to: - Get input from the user (a username and a password) - Validate it with a couple of rules - Print out the errors in validation or a welcome message.
As easy as that, but on the way you'll learn fundamental Haskell concepts and write enough code to think "this wasn't _as hard_". From here then you can probably dive on your own. The book is structured to introduce concepts very slowly. Not as slowly as a Haskell version of "The Little Lisper" but slow enough (The Little Haskeller would be a great book, but probably several thousand pages long).
Some things worth noting, though, are: 1. The exercises should be done, but shouldn't be done conundrum. In my experience, solving the exercises on this book and typing along has been what made the difference. _But_ most exercises are "rewrite this method you wrote in the last chapter using this new abstraction/tool/helper". But then, in follow-up chapters the edits in the code to add functionality depend on the pre-exercise versions (or at least in most cases) which makes for a not great experience (in particular the NonEmpty one, that one was pretty horrible). Keep this in mind: when you rewrite your methods in an exercise use a different name.
2. The last two chapters (_Coercible_ and _Generalizing Further_) look significantly more rushed. Before these, all concepts (more or less) were introduced in a very slow and smooth way (with some exceptions and some hiccups). These two felt rushed, cramming a lot of content to "get to the end". Or at least that's the feeling you get when you make it there.
Great book going over some basic concepts that are necessary for working in Haskell. I was already familiar with a lot of the material covered in this book but I still got a lot of value out of reading it and going through the exercises. In particular, I had never heard about coercion before and that was something insightful that I now use whenever I write Haskell code.