>>109
やってることは同じだけど、もうちょっと素直に書いたほうがいいと思うな
こんな感じで

def binarySearch[T](xs: IndexedSeq[T], elem: T)(implicit ord: Ordering[T]): Int = {
import ord._
@scala.annotation.tailrec
def binarySearch0(start: Int, end: Int): Int = {
if (start > end) return -1
val mid = (start + end) / 2
if (elem < xs(mid)) binarySearch0(start, mid - 1)
else if (elem > xs(mid)) binarySearch0(mid + 1, end)
else mid
}
binarySearch0(0, xs.length - 1)
}

無駄にmatch文使ったりとか、Option使ったりとかはしなくていいと思う
あと、OrderedよりOrderingのほうが若干使い勝手がいいかなと
Orderingは処理ごとにインスタンスを作れるので
たとえばこんな感じで

scala> binarySearch(Array(3, 2, 1), 1)(Ordering.fromLessThan(_ > _))
res1: Int = 2

まあ、全部細かい話だけどw