         }
     }
 
+    public var futureValues: Source<[Element]> {
+        if let signal = _futureValues {
+            return signal.source
+        }
+        else {
+            let s = Signal<[Element]>()
+            _futureValues = s
+            return s.source
+        }
+    }
+
     public func setValue(value: [Element]) {
         let oldCount = _value.count
         _value = value
         _futureChanges?.send(ArrayChange(count: oldCount, modification: .ReplaceRange(0..<oldCount, with: value)))
+        _futureValues?.send(value)
     }
 
     public var count: Int {

            let oldCount = count
            value[bounds] = newValue
            _futureChanges?.send(ArrayChange(count: oldCount, modification: .ReplaceRange(bounds, with: Array<Element>(newValue))))
        }
    }
}

        let oldCount = count
        value.replaceRange(subRange, with: newElements)
        _futureChanges?.send(ArrayChange(count: oldCount, modification: .ReplaceRange(subRange, with: Array<Element>(newElements))))
        _futureValues?.send(value)
    }

    // These have default implementations in terms of replaceRange, but doing them by hand makes for better change reports.
