abstract sclass TripleRef { Triple triple; *() {} *(Triple *triple) {} A get() { ret tripleAtPosition(triple(), position()); } Triple triple() { ret triple; } // 0 = a, 1 = b, 2 = c abstract int position(); // currently compares triple with == public bool equals(O o) { if (!o instanceof TripleRef) false; ret position() == o/TripleRef.position() && triple == o/TripleRef.triple; } }