Dlaczego lib stamu OCaml ma tak wiele funkcji rekurencyjnych bez ogona?

Od niedawna przepisuję wiele standardowych funkcji biblioteki OCaml na rekurencyjne. Biorąc pod uwagę, że pociąga to za sobą prostą transformację CPS, zastanawiam się, dlaczego domyślne wersje nie są pisane w ten sposób.

Na przykład w bibliotece standardowej mapa jest definiowana jako:

let rec map f = function
    []   -> []
  | a::l -> let r = f a in r :: map f l

Przepisałem to tak, aby było:

let map f l =
  let rec aux l k = match l with
      []   -> k []
    | a::l -> aux l (fun rest -> k (f a :: rest))
  in aux l (fun x -> x)

questionAnswers(2)

yourAnswerToTheQuestion