To write or not to write `module Main where` in Haskell
entry-point, haskell, module
Solution
There isn't really a difference, `module Main (main) where` would be the implicit definition when you don't specify a header yourself. From the Haskell 98 Report:
An abbreviated form of module, consisting only of the module body, is permitted. If this is used, the header is assumed to be `module Main(main) where`.
I would prefer an explicit definition to an implicit one but, for a `Main.hs` it's a minor preference.
Problem
Haskell 98 specification says that the entry point of a program, namely, function `main`, should reside in the module called Main, by convention. However, even if you don't write `module Main where` at the top of the file you write `main` in, the source code compiles and seems working correct when you're using GHC. The question is: - What's the difference between writing `module Main where` and not writing it? - Which one is preferred?