 }
 
 /// Implicitly unwrapped Optional array of Mappable objects
-public func <- <T: Mappable, Transform: TransformType where Transform.Object == T>(inout left: Array<T>!, right: (Map, Transform)) {
+public func <- <Transform: TransformType where Transform.Object: Mappable>(inout left: Array<Transform.Object>!, right: (Map, Transform)) {
 	let (map, transform) = right
 	if map.mappingType == MappingType.FromJSON {
 		let transformedValues = fromJSONArrayWithTransform(map.currentValue, transform: transform)

}

/// Implicitly unwrapped Optional array of Mappable objects with transform
public func <- <T: Mappable, Transform: TransformType where Transform.Object == T>(inout left: Array<Array<T>>!, right: (Map, Transform)) {
	let (map, transform) = right
	if let original2DArray = map.currentValue as? [[AnyObject]] where map.mappingType == MappingType.FromJSON {
		let transformed2DArray = original2DArray.flatMap { values in

}

/// Implicitly unwrapped Optional Dictionary of Mappable object <String, T: Mappable> with a transform
public func <- <Transform: TransformType where Transform.Object: Mappable>(inout left: Dictionary<String, Transform.Object>!, right: (Map, Transform)) {
	let (map, transform) = right
	if let dictionary = map.currentValue as? [String : AnyObject] where map.mappingType == MappingType.FromJSON {
		let transformedDictionary = fromJSONDictionaryWithTransform(dictionary, transform: transform) ?? left
