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

    }
  }

  public func value<A>() -> A? {
    switch self {
    case let .JSONString(v): return v as? A
    case let .JSONNumber(v): return v as? A

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

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

