         var handler = makeHandler()
         var errors: [Error] = []
         var valueCount = 0
+        let minValueCount = atLeastOne ? 1 : 0
         
         while true {
             let stateTag = stream.stateTag

    return Parser { stream in
        var handler = makeHandler()
        var errors: [Error] = []
        
        func parse(with p: Parser<T>, successIfNoChangeFailure: Bool) -> Reply<Handler.Result>? {
            let stateTag: Int = stream.stateTag
            switch p.parse(stream) {
            case let .success(v, e):
                handler.valueOccurred(v)
                errors = e
                return nil
            case let .failure(e) where stateTag == stream.stateTag && successIfNoChangeFailure:
                return .success(handler.result, errors + e)
            case let .failure(e):
                return .failure(e)
            case let .fatalFailure(e):

            }
        }
        
        if let reply = parse(with: firstParser) {
            return reply
        }
        
        while true {
            let stateTag = stream.stateTag
            if let reply = parse(with: repeatedParser) {
                return reply
            }
            precondition(stateTag != stream.stateTag, infiniteLoopErrorMessage)
