Since sides are on Ident.t only, and Path.t contains an Ident only for the first segment of the path. M.foo doesn't properly account for side. However opam M put foo in the correct scope.
Example of badly handled code:
module M = struct
let%client foo = 3
let%server bar = 4
end
let%server x = M.foo (* Typechecks, WRONG *)
let%server x = let open M in foo (* Does not typechecks *)
Since sides are on
Ident.t
only, andPath.t
contains anIdent
only for the first segment of the path.M.foo
doesn't properly account for side. Howeveropam M
putfoo
in the correct scope.Example of badly handled code: