     }
 
     func stringify(_ indent: String = "  ") -> String? {
-        guard self != .jsonInvalid else {
+        guard self != .invalid else {
             assert(true, "The JSON value is invalid")
             return nil
         }


public func ==(lhs: JSON, rhs: JSON) -> Bool {
    switch (lhs, rhs) {
    case (.jsonNull, .jsonNull):
        return true
        
    case (.jsonBool(let lhsValue), .jsonBool(let rhsValue)):
        return lhsValue == rhsValue

    case (.jsonString(let lhsValue), .jsonString(let rhsValue)):
        return lhsValue == rhsValue

    case (.jsonNumber(let lhsValue), .jsonNumber(let rhsValue)):
        return lhsValue == rhsValue

    case (.jsonArray(let lhsValue), .jsonArray(let rhsValue)):
        return lhsValue == rhsValue

    case (.jsonObject(let lhsValue), .jsonObject(let rhsValue)):
        return lhsValue == rhsValue
        
    default:

extension JSON {

    public var description: String {
        guard let string = stringify() else {
            return "<INVALID JSON>"
        }
        return string
    }

    private func prettyPrint(_ indent: String, _ level: Int) -> String {
