 }
 
 #if swift(>=3.0)
+public prefix func <|<T: JSONCreatable>(value: JSONArray<T.JSONType>) -> [T] {
+    return value.map(T.init)
+}
+
+public prefix func <|<T: JSONCreatable>(value: JSONArray<T.JSONType>?) -> [T]? {
+    return value.map { $0.map(T.init) }
+}
+
+public prefix func <|<T: JSONStaticCreatable>(value: JSONArray<T.JSONType>?) -> [T]? {
+    return value.map { $0.flatMap(T.from) }
+}
+    
 public func =<|<T>(lhs: inout T, value: JSONObject?) {
     if let v: T = <|value { lhs = v }
 }

}

public func =<|<T: JSONStaticCreatable>(inout lhs: T?, value: T.JSONType?) {
    lhs = <|value
}
#endif

        output =<| value
    }
    
    public static func map<T: JSONCreatable>(value: JSONObject?, to output: inout T) {
        output =<| value
    }
    
    public static func map<T: JSONStaticCreatable>(value: JSONObject?, to output: inout T) {
        output =<| value
    }
    
    public static func map<T: JSONCreatable>(value: JSONObject?, to output: inout T?) {
        output =<| value
    }
    
    public static func map<T: JSONStaticCreatable>(value: JSONObject?, to output: inout T?) {
        output =<| value
    }
    
    public static func map<T: JSONCreatable>(value: JSONObject?, to output: inout [T]) {
        output =<| value
    }
    
    public static func map<T: JSONStaticCreatable>(value: JSONObject?, to output: inout [T]) {
        output =<| value
    }
    
    public static func map<T: JSONCreatable>(value: JSONObject?, to output: inout [T]?) {
        output =<| value
    }
    
    public static func map<T: JSONStaticCreatable>(value: JSONObject?, to output: inout [T]?) {
        output =<| value
    }
    
    public static func map<T: JSONCreatable>(value: T.JSONType, to output: inout T) {
        output =<| value
    }
    
    public static func map<T: JSONStaticCreatable>(value: T.JSONType, to output: inout T) {
        output =<| value
    }
    
    public static func map<T: JSONCreatable>(value: T.JSONType?, to output: inout T?) {
        output =<| value
    }
    
    public static func map<T: JSONStaticCreatable>(value: T.JSONType?, to output: inout T?) {
        output =<| value
    }
    
    public static func map<T: JSONCreatable>(value: [T.JSONType], to output: inout [T]) {
        output =<| value
    }
    
    public static func map<T: JSONStaticCreatable>(value: [T.JSONType], to output: inout [T]) {
        output =<| value
    }
    
    public static func map<T: JSONCreatable>(value: [T.JSONType]?, to output: inout [T]?) {
        output =<| value
    }
    
    public static func map<T: JSONStaticCreatable>(value: [T.JSONType]?, to output: inout [T]?) {
        output =<| value
    }
    #else
    public static func convert<T: JSONCreatable>(value: Array<T.JSONType>) -> [T] {
        return <|value
    }
    
    public static func convert<T: JSONCreatable>(value: Array<T.JSONType>?) -> [T]? {
        return <|value
    }
    
    public static func convert<T: JSONStaticCreatable>(value: Array<T.JSONType>?) -> [T]? {
        return <|value
    }
    
