maybeAsync now takes a function that maybe returns a promise rather than a maybe promise.