Explicit type binding and mutual recursion

Locally abstract types are defined under: OCaml - Language extensions

You could try:

let rec foo : 'a . 'a -> 'a = fun (type a) (x: a) : a -> x
and bar : 'a . 'a -> 'a = fun (type a) (x: a) : a -> foo x

or:

let foo, bar = fun (type a) ->
  let rec foo (x: a) : a = x
  and bar (x: a) : a = foo x in
  foo, bar

instead, maybe.