let indexSuchThat (pred:'a->bool) (l:'a list) : (int option) =
let rec indexOf pred l i = (match l with
| [] -> None
| y::r when (pred y) -> Some i
| y::r -> indexOf pred r (i+1) )
in indexOf pred l 0