With mutually recursive types, the order of the type definitions is unclear, and there is no point where there is only one definition in scope. Contrarily, with a separated type definitions, you could have something like:
type t = A
let x = A
type u = A
(* ... some code that never use `A:t` *)
where it is fine to shadow A:t
if it is never used again.
Thus the duplicate-definitions
case is clearly always problematic without type-directed disambiguation, but the situation is slightly less clear cut with separate definitions.