Jak wygenerować listę rekurencyjną w OCaml

Chciałbym wdrożyć analog Haskellacycle funkcjonować.

Jeśli jawnie przekazuję elementy listy, wydaje się to banalne:

let cycle a b c =
  let rec l = a::b::c::l in
  l

cycle 1 2 3 generuje listę rekurencyjną1, 2, 3, 1...

Ale jak wygenerować listę rekurencyjną na podstawie innej regularnej listy?

let cycle lst = ...

Stosowanie

cycle [1;2;3]

questionAnswers(5)

yourAnswerToTheQuestion