abstractions for io