 public class DiffableArray<T: Equatable> {
     public typealias ChangeHandler = ArrayDiffer<T> -> ()
     
-    private var _value: [T]
     private let changeHandler: ChangeHandler
     
     public var value: [T] {
-        get { return self._value }
-        set {
-            changeHandler(ArrayDiffer(oldValue: self._value, newValue: newValue))
-            self._value = newValue
+        willSet {
+            changeHandler(ArrayDiffer(oldValue: self.value, newValue: newValue))
         }
     }
     
     public var count: Int {
-        return _value.count
+        return value.count
     }
     
     public subscript(index: Int) -> T {
-        return _value[index]
+        return value[index]
     }
     
     public init(initialValue: [T] = [], changeHandler: ChangeHandler) {
         self.changeHandler = changeHandler
-        _value = initialValue
+        value = initialValue
     }
 }
 

                }
            }
        }
        return Array(a.reverse())
    }
    
    /// @return a mapped list of [x] - [y]

    }
    
    private func updateFilteredData() {
        _filteredData.value = filterFunction.map{value.filter($0)} ?? value
    }
}

