 
 }
 
+// MARK: - Futurable -
+public protocol Futurable {
+    typealias T
+    func onComplete(context context: ExecutionContext, cancelToken: CancelToken, complete: Try<T> -> Void) -> Void
+}
+
 // MARK: - Future -
 
-public final class Future<T> {
+public final class Future<T> : Futurable {
 
     typealias OnComplete = Try<T> -> Void
     private var savedCompletions = [CompletionId : OnComplete]()
+    private let queue = Queue("us.gnos.simpleFutures.main")
 
     public private(set) var result: Try<T>? {
         willSet {

    }

    public func cancel(cancelToken: CancelToken) -> Bool {
        return Queue.simpleFutureStreams.sync {
            guard let _ = self.savedCompletions.removeValueForKey(cancelToken.completionId) else {
                return false
            }


    private typealias InFuture = Future<T> -> Void
    private var savedCompletions = [CompletionId : InFuture]()
    let queue = Queue("us.gnos.simpleFuturesStreams.main")

    private let capacity: Int

