У Ocaml нет ничего похожего на предварительные объявления (то есть обещание, что что-то будет определено в конечном итоге), но у него есть рекурсивные определения (то есть блок вещей, которые объявляются, а затем сразу определяются в терминах друг друга).Рекурсивные определения возможны между выражениями, типами, классами и модулями (и более);взаимно рекурсивные модули позволяют рекурсивно определять смешанные наборы объектов.
Вы можете решить свою проблему, используя рекурсивное определение с ключевым словом and
:
class foo(x : bar) = object
method f () = x#h ()
method g () = 0
end
and bar(x : foo) = object
method h () = x#g()
end