   case JSONString(String)
   case JSONNumber(NSNumber)
   case JSONNull
+}
 
-  public static func parse(json: AnyObject) -> JSONValue {
+public extension JSONValue {
+  static func parse(json: AnyObject) -> JSONValue {
     switch json {
     case let v as [AnyObject]: return .JSONArray(v.map(parse))
 

    }
  }

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

    return keys.reduce(self) { $0?[$1] }
  }

}

extension JSONValue: Printable {
