sclass StringWithMeta > Meta is CharSequence { S string; // final. not null *() {} *(S *string) { assertNotNull(string); } public int hashCode() { ret _hashCode(string); } public bool equals(O o) { ret this == o; } // This drops the meta toString { ret string; } // implementation of CharSequence methods public int length() { ret string.length(); } public char charAt(int index) { ret string.charAt(index); } // could change to retain meta public CharSequence subSequence(int start, int end) { ret string.substring(start, end); } }