 
 import Foundation
 
-protocol Model {
+protocol Model: Equatable {
 	class func properties() -> Property[]
-	var _propertyStorage: Dictionary<String, Any> { get set }
+	var _propertyStorage: Dictionary<String, protocol<Equatable>> { get set }
 }
 
 func getProperty<M: Model, T, P: Property where P.Value == T>(model: M, property: P) -> T? {

		return [name, createdAt]
	}

	var _propertyStorage = Dictionary<String, Any>()

	mutating func testThings() {
		getProperty(self, TestModel.name)
		setProperty(&self, TestModel.name, "foobar")
	}
}

	return model._propertyStorage[property.key] as T?
}

func setProperty<M: Model, T: Equatable, P: Property where P.Value == T>(inout model: M, property: P, toValue: T) {
	assert(contains(_reify(model.dynamicType.properties()), PropertyOf(property)))

	model._propertyStorage[property.key] = toValue
