ocaml-merlin: E351 only flags top-level mutable values, not function types
E351 ("Exposed Global Mutable State") was firing on any [val] whose typed
signature contained [Stdlib.array] or [Stdlib.ref] anywhere — including as
a function argument or return type. The rule's intent is "no top-level
mutable singleton in the interface", which only applies to non-function
[val x : <mutable>] declarations; functions that take or return mutable
values are fine because the caller controls the cell, not the module.
Fix: [find_outer_type_constr] in ocaml-merlin's [Dump] now returns [None]
when it sees [Ttyp_arrow] / [Ptyp_arrow] before any [Type_constr],
matching its docstring ("Returns [None] if the next interesting token
isn't a [Type_constr]"). Add three regression cases to good.mli covering
[arr -> int], [int -> arr], and [int ref -> unit].
Also rename [Collision.tca] (the type) to [closest_approach] so it no
longer shadows the function name [Collision.tca]. Public API unchanged
beyond the type name; downstream callers refer only to the function.