We'd still need some way to iterate over the compact parts of a CompoundBytes instance in the TcpConnection implementation (or any other implementation that wants to optimize FileBytes access.

> Why not make Bytes a rope? 

In which way isn't it a rope already in this proposal?

> move the isCompact and compact, ++ etc into Bytes and have ByteString override them with a more specific return type?

Wouldn't we then still have two different kinds of ropes? One kind of compound that allows both `ByteString` and `FileBytes` and another one that allows combining `ByteString` return a non-compact `ByteString` (the current `ByteString.ByteStrings`). That is not that much different from what we have now aside from the name of those methods:

isCompact == isInstanceOf[SimpleBytes]
compact == toByteString

If we want to have only one kind of combination we cannot keep `ByteString.++` which returns a `ByteString` but would have to change it to return `CompoundBytes` (which is one of the points I meant with "far reaching consequences").