For me the convenience of for_ (without having to use void) is more important than increased safety, but I accept that others’ needs are different – sometimes avoiding such nasty surprises is incredibly important, sometimes not so, and it depends both on the developer and the project.

In an ideal world it’d probably be an optional warning (which I’d be able to disable, just like I do with fwarn-unused-do-bind), but I have no idea how hard it would be to implement and I can't imagine how it might look anyway.

Bottom line: if it will result in an error and not a warning (i.e. changing the type of mapM_/forM_/for_, as originally proposed), I’m mildly against this idea.