I would prefer if the compiler warns us if in expression `M.(x)` the value `x` is not in the scope of `M`.
Clarification: usually when we say `M.(x + cross y)` we want to use only values from module `M`
and problems arise when something is captured from outside the module. Such kind of local opens
are usually use to open rich modules, that fully defines an algebra of a type, i.e., a full suite of
common operations like, comparison operations, arithmetics, etc. So, using local open is some kind
of local algebra switch operation. In other words switching to other domain specific language.
A good style would be to explicitly qualify every external value that is used inside the local opened scope:
M.(x * Vec.of_array [| 1; 2 |])