         guard let (result1, remainder1) = left(stream) else { return nil }
         guard let (result2, remainder2) = right(remainder1) else { return nil }
         return ((result1, result2), remainder2)
+    }
+}
+
+private func eatLeft<A, B>(_ left: @escaping Parser<A>, _ right: @escaping Parser<B>) -> Parser<B> {
+    return { stream in
+        guard let (_, remainder1) = left(stream) else { return nil }
+        guard let (result2, remainder2) = right(remainder1) else { return nil }
+        return (result2, remainder2)
     }
 }
 

}()

private let number: Parser<Value> = {
    let digitCharacters = "0123456789.-".characters.map { $0 }
    let digitParsers = digitCharacters.map { character($0) }
    let digit = one(of: digitParsers)
    return map(many1(digit)) {
        let numberString = String($0)
        if let int = Int(numberString) {
            return Value.number(.int(int))
        } else {
            let double = Double(numberString)!
            return Value.number(.double(double))
        }
    }

            guard let (b, remainder4) = hexDigit(remainder3) else { return nil }
            guard let (c, remainder5) = hexDigit(remainder4) else { return nil }
            guard let (d, remainder6) = hexDigit(remainder5) else { return nil }
            return (String([a, b, c, d]), remainder6)
        }
    }()
