|
binarySearch :: Integral a => (a -> Ordering) -> (a, a) -> Maybe a
|
|
binarySearch p (low,high)
|
|
| high < low = Nothing
|
|
| otherwise =
|
|
let mid = (low + high) `div` 2 in
|
|
case p mid of
|
|
LT -> binarySearch p (low, mid-1)
|
|
GT -> binarySearch p (mid+1, high)
|
|
EQ -> Just mid
|