         - 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> {
+    public func flatMap<U>(_ f: (@escaping (T) -> ResultPromise<U, E>)) -> ResultPromise<U, E> {
         let promise = ResultPromise<U, E>()
         await { result in
             switch result {

       - observer: A closure that takes a `Result` instance and returns
         nothing.
     */
    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.
    public func fulfil(with result: Result<T, E>) {
        self.result = result
    }
    
