Maybe this should implement `Completer<T>` ?