Re: automatically resolving open?

Francois Pottier <[email protected]> Wed, 23 Apr 2025 16:32:08 +0200
Newsgroups gmane.comp.lang.caml.inria
Message-ID <[email protected]>
Hello,

Le 23/04/2025 à 16:10, Kenichi Asai a écrit :
> Would it be possible to transform an OCaml file to the one that does
> not use open?

I don't know whether it is possible/easy to do this today,
but it would certainly interesting and useful to have such
a tool.

I note that the output that you expect cannot always be
produced, due to name shadowing issues. For example if
the program is

open List
module List = struct end
let test = map (fun x -> x + 1) [1; 2; 3]

then the best output that one can expect is

let map = List.map
module List = struct end
let test = map (fun x -> x + 1) [1; 2; 3]

That said (contradicting myself), one can actually obtain
better output if one is careful to always use absolute paths.
In this example one could write:

module List = struct end
let test = Stdlib.List.map (fun x -> x + 1) [1; 2; 3]

which relies on the fact that the name "Stdlib" is not shadowed.

As far as I know there is currently no syntax for absolute
paths in OCaml (every path is relative, and every name can
be shadowed). Maybe we should consider adding such a syntax?

-- 
François Pottier
[email protected]
https://cambium.inria.fr/~fpottier/