argument only needs to be file-like ("interface")