2012-06-20 19 views
24

La especificación Haskell 98 dice que el punto de entrada de un programa, a saber, la función main, debe residir en el módulo llamado Main, por convención. Sin embargo, incluso si no escribe module Main where en la parte superior del archivo en el que escribe main, el código fuente se compila y parece funcionar correctamente cuando usa GHC.Para escribir o no escribir `module Main where` en Haskell

La pregunta es:

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

Respuesta

22

No existe realmente una diferencia, module Main (main) where sería la definición implícita cuando usted no especifica un encabezado usted mismo. Desde el Haskell 98 Report:

Una forma abreviada del módulo, que consiste solamente en el cuerpo del módulo, está permitido. 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 un Main.hs es una preferencia menor.

+8

La diferencia es que sin encabezado de módulo, solo 'main' se exporta, pero con' module Main where' se exporta cada definición de nivel superior. Parece que tus ojos vieron 'module Main (main) where' donde no había ninguna lista de exportación;) –

+4

Es importante tener la lista de exportación' (main) ', porque eso permite que el compilador optimice más. – augustss

+0

@DanielFischer @augustss No encuentro ninguna documentación que respalde eso. GHC no parece hacer esa distinción al construir un ejecutable; parece hacer la misma optimización y vinculación para 'module Main (main) where' como' module Main where' también. – jdeseno

Cuestiones relacionadas