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

// 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))
        }
    }
}


    }
}

// 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 {
