     }
 
     #if swift(>=3.0)
-        public init<S : Sequence where S.Iterator.Element == Byte>(_ elements: S) {
+        public init<S : Sequence>(_ elements: S) where S.Iterator.Element == Byte {
             self.init(Array(elements))
         }
     #else

    #endif

    #if swift(>=3.0)
        public mutating func replaceSubrange<C : Collection where C.Iterator.Element == Byte>(_ subRange: Range<Int>, with newElements: C) {
            self.bytes.replaceSubrange(subRange, with: newElements)
        }
    #else


            loop: while true {
                switch decoder.decode(&generator) {
                case .scalarValue(let char): string.unicodeScalars.append(char)
                case .emptyInput: break loop
                case .error: return nil
                }
            }

