In particular, splitting up the `Read` and `Write` halves mean that you can't use these in a generic context that expects a full stream (`Read + Write`). We should consider deprecating these in favor of a single `null` constructor that is both `Read` and `Write`.