Я думаю, что вы хотите сделать следующее:
let uncombine s =
let rec aux sr =
match sr with
| Nil -> Nil, Nil
| Cons ((e1, e2), sr) ->
let s1, s2 = aux sr in
Cons (e1, s1), Cons (e2, s2)
in
aux (s ())
Конечно, вы также можете написать хвост-рекурсивную функцию и обратить ее в конце.У вас не будет лучшей производительности, но вы не рискуете получить переполнение стека.