A lot of folks are frustrated by having to write JSON decoders.
First, I think the idea of generating JSON decoders is based on an incomplete view of data interchange formats. I do not think the historical examples support that theory, and I wrote about it extensively here:
Please read that.
Second, I have found ways to make the compiler more helpful when you are running into decoder issues.
My personal theory is that decoders make a lot more sense if you learn about them from the official guide. Specifically, things go better if you learn about Maybe, then Result, then Decoder.
Not everyone reads that document though, so the compiler now detects type mismatches that involve the Json.Decode.Decoder type and gives a link to documentation that explains how it all fits together.
I think it is plausible that folks end up wasting hours or days stuck at this exact moment, and it is really not clear where to go to learn the necessary information right now. I plan to explore this theory by releasing the improved error messages with 0.19.
Finally, I think it makes sense to explore points (1) and (2) fully before deciding that the language should be more complicated. I understand that not everyone agrees with this kind of strategy, but I think it has served Elm well so far and plan to continue using it.