        - 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)
     }

    ///
    /// - Parameters:
    ///   - result: A `Result<T, E>` that describes the result.
    func fulfil(with result: Result<T, E>) {
        self.result = 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))
