Your comments are absolutely welcome!
Looking over your taco-donut repo, I wish I’d seen it sooner! It reminded me of some comments Richard Feldman and others have made in this conversation that I had forgotten about, and didn’t think address in the post.
Your comments about the drive to “componentize” everything coming from React et. al. really resonated with me: I agree that the “everything is a hierarchical component” philosophy is a major stumbling block for people coming to Elm.
That said, I don’t think the correct reaction to that tendency is that all hierarchy is bad, or that hierarchy is antithetical to TEA; Hierarchy lets us break a large problem into simple parts and solve them independently. How you implement hierarchy, or equivalently, where you draw component boundaries, within the constraints that TEA imposes, makes all the difference.
The philosophy behind “deferring the view” is that maintaining the model/msg/init/update hierarchy separately from the view hierarchy is ultimately better than trying to maintain them both at the same time, and that we can do this in a way that lets the type-checker help us stay consistent.
I can point out some more things I find problematic with the taco-donut approach, but I don’t think a design pattern face-off would be productive right now. It’s my n=1 dev experience with this technique versus your n=3-5(?) dev experience with yours, so it’s more of a philosophical debate than anything.
The post isn’t meant to argue that you should apply this technique to every module in your program, or that it’s the best way to do things (do let me know if you got that impression); My intention is to describe how to do it to an elm-savvy audience and give some reason for wanting to try it out, so that it can get some more testing than is possible than at my company alone. From this perspective, coming to definite conclusions like “you’re going down a dark path” seems premature; it might well be true, but I don’t think you gave any evidence strong enough to discourage people from trying deferred views out.
I’ll be posting final draft soon, so I’d appreciate if we table this discussion until it goes live. That way we can continue out in the open, to the benefit of the whole community