[ghc-steering-committee] #283: Local modules (again), recommendation: accept

Richard Eisenberg rae at richarde.dev
Tue May 25 21:54:38 UTC 2021

> On May 25, 2021, at 3:09 PM, Alejandro Serrano Mena <trupill at gmail.com> wrote:
> - I am not sure of the benefit of allowing (1), compared with the possible surprise of users.
> - I do not fully understand (2).
> - I think (3) would be great, if we ensure that nothing changes if I don’t use “qualified”, even if -XLocalModules is on.

If in the language, I would use (1) -- anonymous local modules -- regularly, when defining a function or class instance with a bunch of "local" helper functions. Of course, if we can't omit the module name, I will suffer no great harm.

I cannot offer the guarantee you seek in (3), but I don't think you want it. (If nothing changes, then the feature has no effect!) Here is a scenario where (3) could cause trouble:

> import Data.Set as Set ( abcde )
> data Set = Mk { abcdf :: Int }
> blah = Set.abcdf

Previously, GHC would have suggested that you perhaps misspelled abcde. Now, you'll get (presumably) a type error.

Here's another case:

> import Data.Set as Set ( Set )
> data Set = Mk
> x :: Set.Set

Everything is happy today, but with -XLocalModules (and (3)), the type of x is an ambiguous name.

Any example that causes trouble, though, will have something in common: an imported module name (possibly via an alias) that matches a locally defined type name. I would imagine this pattern is rare in practice, and that the benefit of (3) would outweigh the number of times that a problem like this bites.

I, too, could live without (2).

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/ghc-steering-committee/attachments/20210525/5e433eff/attachment.html>

More information about the ghc-steering-committee mailing list