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
francois.pottier@inria.fr
https://cambium.inria.fr/~fpottier/