The only flaw with this approach is that an object supporting `puts` that's not an `IO` object (which is our supported API for formatter outputs) could cause issues, but I think we can safely assume that if someone does try that, we don't support it.