let rec subst_found sexp ~subst = function
| `Found -> subst
| `Pos (pos, found) ->
match sexp with
| Atom _ ->
failwith
"Sexplib.Sexp.subst_search_result: atom when position requested"
| List lst ->
let rec loop acc pos = function
| [] ->
failwith
"Sexplib.Sexp.subst_search_result: short list when position requested"
| h :: t when pos <> 0 -> loop (h :: acc) (pos - 1) t
| h :: t ->
List (List.rev_append acc (subst_found h ~subst found :: t))
in
loop [] pos lst