> These misunderstandings let people write clumsy code like do putStrLn "text"
Is it really a problem that newcomers write things like that? It doesn't make the program any slower or more buggy. It's trivial for a code-reviewer to fix. If the new haskellers have hlint installed, they'll get a hint to simplify it and eventually they'll learn the idiomatic way. (And the readFile/writeFile example was just fine before being "fixed".)