On 2017-05-24 10:28 AM, Joachim Breitner wrote:
I've ended up uncertain, so I'll just throw it out there: are unused
value warnings affected by this proposal?

that is a very good point, thanks for raising it. I have two different
answers:

A) You are right. Everything is exported, so without an explicit module
header, unused value warnings would not happen. This is undesirable,
and thus this proposal should probably be killed.

B) Warnings are not specified by the report, and the implementation is
free to warn about unused bindings in a headerless Main module, based
on the implementation’s knowledge that even though these are exported,
they are not used.

I would say

B') Warnings are not specified by the report.

We can pretty much stop there. If you want to go deeper, IMO the compiler should just suppress the warnings by default. A headerless module would normally be used only for examples and quick tests, unused binding warnings would be a nuisance for that use case.


But answer B is less convincing in the corner case of Main being
mutually recursive with another module. (Who would do that without
naming Main? But yes, it is a problem.)

When dicussing a software-engineering issue like compiler warnings, as opposed to a language-design issue, it doesn't make sense to concentrate on corner cases. A non-root Main module is already a corner case. A non-root header-less Main module is a corner inside a corner case. Whoever does that may miss some compiler warnings, depending on the compiler implementation. I won't lose any sleep over that. If the compiler developers do, they have the option to issue the unused-binding warnings only when a header-less module is imported.

_______________________________________________
Haskell-prime mailing list
Haskell-prime@haskell.org
http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-prime

Reply via email to