 }
 
 // Concrete future wrapper given an instance of a `FutureType`.
-private final class ForwardingFuture<Future: FutureType>: FutureBase<Future.Value> {
+private final class ForwardedTo<Future: FutureType>: FutureBox<Future.Value> {
     let base: Future
     init(base: Future) {
         self.base = base

}

// Concrete future wrapper for an always-filled future.
private final class FilledFuture<Value>: FutureBase<Value> {
    let value: Value
    init(value: Value) {
        self.value = value

///   ensuring that only your implementation can fill the deferred value
///   using the `PromiseType` aspect.
public struct Future<Value>: FutureType {
    private let box: FutureBox<Value>

    /// Create a future whose `upon(_:function:)` method forwards to `base`.
    public init<Future: FutureType where Future.Value == Value>(_ base: Future) {
        self.box = ForwardedTo(base: base)
    }

    /// Wrap and forward future as if it were always filled with `value`.
    public init(value: Value) {
        self.box = Always(value: value)
    }

    /// Create a future that will never get fulfilled.
    public init() {
        self.box = Never()
    }
    
    /// Create a future having the same underlying future as `other`.
