race.emaker is needed by race.updoc and should be there. It used to exist but now seems gone. We need it back. Kevin suggests:
def resolvingBy(f) {
def [p, r] := Ref.promise()
f(r)
return p
}
def race(cs) {
return resolvingBy(fn r {
for c in cs {
Ref.whenResolved(c, r.resolveRace)
}
})
}
Possible simplification:
def resolvingBy(f) {
f(def p)
return p
}
Possible enhancements:
def resolvingBy(f) {
def [p, r] := Ref.promise()
try {
f(r)
} catch ex {
r.resolveRace(Ref.broken(ex))
}
return p
}
def race(cs) {
if (cs.size() == 0) { throw "oops" }
return resolvingBy(fn r {
for c in cs {
Ref.whenResolved(c, r.resolveRace)
}
})
}