| > problems with technical leadership I've never been lucky enough to get a full-time Haskell job (nor did I try), so my experience is based on single-man development & prototyping using the existing stuff found on Hackage. I presume that it may be different for a huge organization that can afford to build the entire ecosystem from the ground up while enforcing design rules (and these rules must be created by an exceptionally brilliant architect!). But in other languages you don't have this situation. > Many of us have also seen the C++ library or application that busts out the template metaprograms at every opportunity. C++ and boost set standards a bit low, to be honest. > Are your engineers running around implementing random research papers? This has nothing to do with Haskell. Not research papers, just the usual business logic. The problem is that research papers set the code style. Also they are not "my engineers". > In practice, this is almost never a big problem. It typically is, because changing internal implementation is reflected in the interface, and for each invocation of the function change has to propagate through _the entire_ call stack to some place running in IO monad or whatever. > almost all of your functions run in some monad already You defy your own argument. If that's how you design application, what's the point of bothering with side effect isolation then? |
For Example, Yesod gives you the Handler monad, which is based in IO, and really just exists to provide access to runtime/request information, so at the API handler level you can do anything you need to. But what's nice is that not everything has to live in IO, and so in places where it makes sense, such as a parser, we can say that parser doesn't need IO, because that wouldn't make sense.
And my point here is that just having the ability to separate between IO and non-IO is very useful; we also do not have to split every single effect down into it's own special, separate type; in many cases that would just be overkill.