// RUN: not %target-swift-frontend %s -emit-ir public struct Trie { internal var root: TrieNode public init() { self.root = TrieNode() } public mutating func removeValue(forCollection collection: C) -> Value? where C.Iterator.Element == Key { return self.root.removeValue(forIterator: collection.makeIterator()) } public mutating func updateValue(_ value: Value, forCollection collection: C) -> Value? where C.Iterator.Element == Key { return self.root.updateValue(value, forIterator: collection.makeIterator()) } public func value(forCollection collection: C) -> Value? where C.Iterator.Element == Key { return self.root.value(forIterator: collection.makeIterator()) } } internal struct TrieNode { internal let children: Dictionary> internal let value: Value? internal init(value: Value?=nil) { self.children = Dictionary>() self.value = value } internal mutating func removeValue(forIterator iterator: inout I) -> Value? where I.Element == Key { return nil } internal mutating func updateValue(_ value: Value, forIterator iterator: inout I) -> Value? where I.Element == Key { return nil } internal func value(forIterator iterator: inout I) -> Value? where I.Element == Key { guard let key = iterator.next() else { return value } return self.children[key]?.value(forIterator: iterator) } }