sclass WithProbability extends Var { double probability; // assumed between 0 and 1 *() {} *(double *probability, A a) { super(a); } toString { ret "p=" + formatDouble_noLeadingZero(probability, 2) + ": " + str(get()); } 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; } }