func firstMatch(in values: [T], equalTo target: T) -> T? { values.first { $0 == target } } protocol FirstReadable { associatedtype Element; func first() -> Element? } struct Queue: FirstReadable { let values: [T] func first() -> T? { values.first } } @main struct Lesson { static func main() { print(firstMatch(in: ["Cedar", "Ash", "Cedar"], equalTo: "Ash") ?? "missing") print(Queue(values: [2, 3]).first() ?? -1) } }