func binarySearch(xs: [T], x: T) -> Int? { var (low, high) = (0, xs.count - 1) while low <= high { switch (low + high) / 2 { case let mid where xs[mid] > x: high = mid - 1 case let mid where xs[mid] < x: low = mid + 1 case let mid: return mid } } return nil }