         output =<| value
     }
     
-    public static func map<T>(value: JSONObject?, to output: inout T) where T: JSONCreatable {
-        output =<| value
-    }
-    
-    public static func map<T>(value: JSONObject?, to output: inout T) where T: JSONStaticCreatable {
-        output =<| value
-    }
-    
-    public static func map<T>(value: JSONObject?, to output: inout T?) where T: JSONCreatable {
-        output =<| value
-    }
-    
-    public static func map<T>(value: JSONObject?, to output: inout T?) where T: JSONStaticCreatable {
-        output =<| value
-    }
-    
-    public static func map<T>(value: T.JSONType, to output: inout T) where T: JSONCreatable {
-        output =<| value
-    }
-    
-    public static func map<T>(value: T.JSONType, to output: inout T) where T: JSONStaticCreatable {
-        output =<| value
-    }
-    
-    public static func map<T>(value: T.JSONType?, to output: inout T?) where T: JSONCreatable {
-        output =<| value
-    }
-    
-    public static func map<T>(value: T.JSONType?, to output: inout T?) where T: JSONStaticCreatable {
+    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 where T: JSONCreatable>(value: JSONDictionary.Value?) -> T? {
-        return <|value
-    }
-    
-    public static func convert<T where T: JSONStaticCreatable>(value: JSONDictionary.Value?) -> T? {
-        return <|value
-    }
-    
-    public static func convert<T where T: JSONCreatable>(value: T.JSONType) -> T {
-        return <|value
-    }
-    
-    public static func convert<T where T: JSONStaticCreatable>(value: T.JSONType) -> T? {
+    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
     }
     

public func =<|<T: JSONStaticCreatable>(lhs: inout T?, value: JSONObject?) {
    lhs = <|value
}

public func =<|<T: JSONCreatable>(lhs: inout T, value: T.JSONType) {
    lhs = <|value

}

#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 }
}
