        - observer: A closure that takes a `Result` instance and returns
          nothing.
      */
-    func await(with observer: @escaping (Result<T, E>) -> Void) {
+    public func await(with observer: @escaping (Result<T, E>) -> Void) {
         observers.append(observer)
         result.map(observer)
     }

        - f: A closure `(T) -> Result<U, E>`.
     - Returns: A new `ResultPromise<U, E>` instance.
     */
    func flatMap<U>(_ f: (@escaping (T) -> ResultPromise<U, E>)) -> ResultPromise<U, E> {
        let promise = ResultPromise<U, E>()
        await { result in
            switch result {

       `Result<U, E>` is the result of `flatMap`'ing `f` over the
       `Result<T, E>` embedded in this instance.
     */
    public func map<U>(_ f: (@escaping (T) -> Result<U, E>)) -> ResultPromise<U, E> {
        let promise = ResultPromise<U, E>()
        await { result in
            promise.fulfil(with: result.flatMap(f))
