     }
     
     // invalid json
-    return (JSON(), cursor)
+    return (.None("invalid json: expect 'true' at \(cursor)"), cursor)
 }
 
 private func parseFalse(string: String, index: String.Index) -> (JSON, String.Index) {

            string.append(comma)
        }
        // remove last comma
        string.removeAtIndex(string.endIndex.advancedBy(-1))
        string.append(close)
        return  
    }

        case .Null: return parseNull(string, index: cursor)
        default: break
    }
    return (.None("invalid json: character invalid at \(cursor)"), cursor)
}

private func parseString(string: String, index: String.Index) -> (JSON, String.Index) {
    let (s, cursor, err) = _parseString(string, index: index)
    if  let json = s {
        return (JSON(json), cursor)
    }
    return (.None(err), cursor)
}

private func parseNumber(string: String, index: String.Index) -> (JSON, String.Index) {
