     }
 
     public func unarchivedValue<T: JSONCoding>(in json: Any, _ unarchiver: JSONUnarchiving) throws -> T {
-        return try anyValue(in: json, unarchiver, transform: unarchiver.unarchived(with:))
+        return try anyValue(in: json, unarchiver) {
+            try unarchiver.unarchived(with: $0)
+        }
     }
 
     public func optionalUnarchivedValues<T: JSONCoding>(mappedIn json: Any, _ unarchiver: JSONUnarchiving) throws -> [T]? {
-        return try optionalValue(in: json, unarchiver, transform: unarchiver.unarchived(map:))
+        return try optionalValue(in: json, unarchiver) { (jsons: [Any]) in
+            try unarchiver.unarchived(map: jsons)
+        }
     }
 
     public func unarchivedValues<T: JSONCoding>(mappedIn json: Any, _ unarchiver: JSONUnarchiving) throws -> [T] {
-        return try value(in: json, unarchiver, transform: unarchiver.unarchived(map:))
+        return try value(in: json, unarchiver) { (jsons: [Any]) in
+            try unarchiver.unarchived(map: jsons)
+        }
     }
 
     public func optionalUnarchivedValues<T: JSONCoding>(discardingErrorsMappedIn json: Any, _ unarchiver: JSONUnarchiving) throws -> [T]? {
-        return try optionalValue(in: json, unarchiver, transform: unarchiver.unarchived(discardingErrorsMap:))
+        return try optionalValue(in: json, unarchiver) { (jsons: [Any]) in
+            unarchiver.unarchived(discardingErrorsMap: jsons)
+        }
     }
 
     public func unarchivedValues<T: JSONCoding>(discardingErrorsMappedIn json: Any, _ unarchiver: JSONUnarchiving) throws -> [T] {
-        return try value(in: json, unarchiver, transform: unarchiver.unarchived(discardingErrorsMap:))
+        return try value(in: json, unarchiver) { (jsons: [Any]) in
+            unarchiver.unarchived(discardingErrorsMap: jsons)
+        }
     }
 
     public func optionalAnyValue<U>(in json: Any, _ unarchiver: JSONUnarchiving, transform: (Any) throws -> U) throws -> U? {
         let optionalValue = try optionalAnyValue(in: json)
         return try optionalValue.flatMap { value in
-            try pushed(on: unarchiver, do: transform)
+            try pushed(on: unarchiver) {
+                try transform(value)
+            }
         }
     }
 
     public func optionalAnyValue<U>(in json: Any, _ unarchiver: JSONUnarchiving, optionalTransform: (Any) throws -> U?) throws -> U? {
         let optionalValue = try optionalAnyValue(in: json)
         return try optionalValue.flatMap { value in
-            try pushed(on: unarchiver, do: optionalTransform)
+            try pushed(on: unarchiver) {
+                try optionalTransform(value)
+            }
         }
     }
 


    public func optionalKeyValue(in json: Any) throws -> JSONKey? {
        let keyValue: String? = try optionalValue(in: json)
        return keyValue.flatMap(JSONRandomKey.init(keyValue:))
    }

    public func keyValue(in json: Any) throws -> JSONKey {


    public func optionalDateValue(timeIntervalSince1970In json: Any) throws -> Date? {
        let interval: TimeInterval? = try optionalValue(in: json)
        return interval.flatMap { Date(timeIntervalSince1970: $0) }
    }

    public func dateValue(timeIntervalSince1970In json: Any) throws -> Date {
