sclass WithProbability extends Var { double probability; // assumed between 0 and 1 *() {} *(double *probability, A a) { super(a); } toString { ret "p=" + renderedProbability() + ": " + str(get()); } S renderedProbability() { ret formatDouble_noLeadingZero(probability, 2); } double probability() { ret probability; } public int hashCode() { ret boostHashCombine(main hashCode(probability), main hashCode(get())); } public bool equals(O o) { if (o cast WithProbability) { ret probability == o.probability && eq(get(), o!); } false; } }