extend Base { new L traits; bool hasTrait(S t) { ret containsIC(traits(), t); } L traits() { if (nempty(text) && neq(first(traits), text)) traits.add(0, text); ret traits; } void addTraits(L l) { setAddAll(traits(), l); } void addTrait(S t) { if (nempty(t)) setAdd(traits(), t); } S textForRender() { L traits = traits(); if (l(traits) <= 1) ret text; ret text + " [" + join(", ", dropFirst(traits)) + "]"; } }