interface CompressionRegime { default byte[] decompressorToBytes(A decompressor) { ret toByteArray(decompressorToBytes(decompressor)); } default Iterator decompressorToByteIterator(A decompressor) { ret iterator(decompressorToByteList(decompressor)); } L decompressorToByteList(A decompressor); A decompressorFromBytes(byte[] compressed); O runDecompressor(A a); default byte[] decompress(byte[] compressed) { ret toByteArray(runDecompressor(decompressorFromBytes(compressed))); } default L decompressToByteList(byte[] compressed) { ret toByteList(runDecompressor(decompressorFromBytes(compressed))); } default L decompressToByteIterator(byte[] compressed) { ret toByteIterator(runDecompressor(decompressorFromBytes(compressed))); } }