// immutable object sclass Bits { BitSet bs; int n; // length *() { bs = new BitSet; } *(BitSet *bs, int *n) {} *(S s) { byte[] data = toUtf8(s); bs = bytesToBitSet(data); n = data.length*8; } byte[] toByteArray() { ret bitSetToBytes(bs, n); } public int hashCode() { ret main.hashCode(bs) + n; } public bool equals(O o) { if (!o instanceof Bits) false; ret n == o/Bits.n && eq(bs, o/Bits.bs); } S getString() { ret fromUtf8(toByteArray()); } }