haskell module entry-point

Escribir o no escribir `módulo principal donde` en Haskell



module entry-point (1)

Realmente no hay una diferencia, module Main (main) where estaría la definición implícita cuando no especifique un encabezado usted mismo. Del informe Haskell 98 :

Se permite una forma abreviada de módulo, que consiste solo en el cuerpo del módulo. Si se usa esto, se supone que el encabezado es module Main(main) where .

Preferiría una definición explícita a una implícita, pero para Main.hs es una preferencia menor.

La especificación Haskell 98 dice que el punto de entrada de un programa, es decir, la función main , debe residir en el módulo denominado Main, por convención. Sin embargo, incluso si no escribe el module Main where en la parte superior del archivo que escribe main , el código fuente se compila y parece funcionar correctamente cuando está utilizando GHC.

La pregunta es:

  1. ¿Cuál es la diferencia entre escribir el module Main where y no escribirlo?
  2. ¿Cuál es el preferido?