This cleans up some repetitive type conversions on the input sets to IO.select It also introduces a minor behavior change: IO.select will now eagerly return readable objects that first have to be coerced to an IO which have data in their input buffers (e.g. in the form [[obj],,]). The previous logic would only do this if a type coersion wasn't needed. I'm guessing the previous logic contained a bug. If this behavior isn't desired, mea culpa.