Adding `traverse` and `for` to Data.Set seems like a good idea.
I am not convinced about adding mapM and forM if there's no
performance benefit to those versions. I'd rather not see that
redundancy proliferate without good reason. In base, I would like to
see those functions reduced to aliases per this thread , but that's
waiting on .
I'm probably around +.25 on traverse and -1 on the rest. I don't want to clutter up the API too much with different forms of a derived operation when we don't even have evidence that it'll be used much.