     return keys.reduce(self) { $0?[$1] }
   }
 
-  public static func map<A where A: JSONDecodable, A == A.DecodedType>(value: JSONValue) -> [A]? {
-    switch value {
-    case let .JSONArray(a):
-      return a.reduce([]) { curry(+) <^> $0 <*> (pure <^> A.decode($1)) }
-    default: return .None
-    }
-  }
 }
 
 extension JSONValue: Printable {

  case JSONString(String)
  case JSONNumber(NSNumber)
  case JSONNull

  public static func parse(json: AnyObject) -> JSONValue {
    switch json {
    case let v as [AnyObject]: return .JSONArray(v.map(parse))


    }
  }

  subscript(key: String) -> JSONValue? {
    switch self {
    case let .JSONObject(o): return o[key]
    default: return .None
