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:
- Cuál es la diferencia entre escribir
module Main where
y no escribirlo? - ¿Cuál se prefiere?
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;) –
Es importante tener la lista de exportación' (main) ', porque eso permite que el compilador optimice más. – augustss
@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