     }
 }
 
+// Support Array of plain Types
+
+func parseArray<T>(inout left: [T]?, right: AnyObject?) {
+    if let a = right as? [AnyObject] {
+        let tmp: [T] = a.flatMap { var t: T?; parseType(&t, right: $0); return t }
+        if tmp.count == a.count {
+            left = tmp
+        }
+    }
+}
+
+public func <-- <T>(inout left: [T], right: AnyObject?) {
+    var temp:[T]? = nil
+    parseArray(&temp, right:right)
+    if let t = temp {
+        left = t
+    }
+}
+
+public func <-- <T>(inout left: [T]?, right: AnyObject?) {
+    parseArray(&left, right: right)
+}
+
 // MARK: - Parse Custom Types
 
 public protocol ArrowParsable {

// Suppport Array of custom Types

public func <== <T:ArrowParsable>(inout left:[T], right: AnyObject?) {
    left = [T]()
    if let pns = right as? [AnyObject] {
        for pn in pns {
            left.append(T(json:pn))
        }
    }
}

public func <== <T:ArrowParsable>(inout left:[T]?, right: AnyObject?) {
    left = [T]()
    if let pns = right as? [AnyObject] {
        for pn in pns {
            left?.append(T(json:pn))
        }
    }
}


infix operator <-- {}

public func <-- <T>(inout left: T, right: AnyObject?) {
    var temp:T? = nil
    parseType(&temp, right:right)
    if let t = temp {
        left = t
