 /// - parameter data: The input data to unpack.
 /// - parameter length: The length of the string.
 ///
-/// - returns: A string representation of `size` bytes of data.
+/// - returns: A string representation of `size` bytes of data and the not-unpacked remaining data.
 func unpackString(_ data: Subdata, count: Int) throws -> (value: String, remainder: Subdata) {
     guard count > 0 else {
         return ("", data)

///
/// - parameter data: The input data to unpack.
///
/// - returns: A `MessagePackValue`.
public func unpack(_ data: Data, compatibility: Bool = false) throws -> (value: MessagePackValue, remainder: Subdata) {
    return try unpack(Subdata(data: data), compatibility: compatibility)
}

/// Unpacks a data object into a `MessagePackValue`, ignoring excess data.

///
/// - parameter data: The input data to unpack.
///
/// - returns: A `MessagePackValue`and the not-unpacked remaining data.
public func unpack(_ data: Subdata, compatibility: Bool = false) throws -> (value: MessagePackValue, remainder: Subdata) {
    guard !data.isEmpty else {
        throw MessagePackError.insufficientData
