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.