This objection -- "but bad programmers will make a mess of it" -- is the stock objection everybody makes to every unorthodox programming construct. Since it is an objection to everything, it is an objection to nothing.
That what isn't true? That bad programmers will make a mess? Of course that's true. But if you can't show how and why it's more true of construct X than in general, you've said nothing. Meanwhile, it sounds like you've made a serious objection to X when you haven't.
This is why I like strong static typing. Instead of bad programmers making a mess of the language, the compiler makes a mess of them.
(I'm half-joking, since there are a variety of bad programmers and not all are of the "can't get code to compile" variety. Actually, the most dangerous bad programmers are the high-IQ bad programmers, but that's another rant. Still, I think it's true that the discipline enforced by languages like ML and Haskell turns a lot of bad programmers away.)