I have a followup question to Lennart's motivated by the same
IOHCC entry.

The Haskell report states that in an abbreviated module, the
header is assumed to be

  module Main where

which makes all the identifiers exportable (and so the monomorphism
restriction could bite the unwary). I tend to think that the header
should be the simpler

  module Main(main) where

so that only main is exported. It seems to me that the only value of
having the abbreviated form is for small, single-module programs, so
main is the only thing that needs to be exported. In a multi-module
program it seems to me to be bad practice not to be explicit about all
module headers. At least in the case when Main defines stuff used by
other modules this proposal will require the header to be explicit.

John.

PS. I don't know how others out there feel about the Obfuscated Haskell
    competition that Lennart is running, but I am now convinced it's a
    great idea. It is exactly these programs which test the corners of
    the language definition. Perhaps some of them should go into Ian
    Holyer's validation suite! Just in preparing my entry I hit a bug
    in glhc (with regard to defaults), and the program's failure under
    hbc provoked Lennart's question.


Reply via email to