Specyfikacja Haskell 98 mówi, że punkt wejścia programu, a mianowicie funkcja main
, powinien znajdować się w module o nazwie Main, zgodnie z konwencją. Jednak nawet jeśli nie napiszesz module Main where
w górnej części pliku, w którym piszesz main
, kod źródłowy kompiluje i wydaje się działać poprawnie, gdy używasz GHC.Aby napisać lub nie napisać `module Main gdzie` w Haskell
Pytanie brzmi:
- Jaka jest różnica między pisania
module Main where
i nie pisząc to? - Który z nich jest preferowany?
Różnica polega na tym, że bez nagłówka modułu wyeksportowane jest tylko 'główne', ale z' głównym modułem 'gdzie eksportowana jest każda definicja najwyższego poziomu. Wydaje się, że twoje oczy widziały 'moduł Główny (główny) gdzie' gdzie nie ma listy eksportu;) –
Ważne jest posiadanie listy eksportu '(main)', ponieważ to pozwala kompilatorowi zoptymalizować więcej. – augustss
@DanielFischer @augustss Nie mogę znaleźć żadnej dokumentacji, która by to wspierała. GHC wydaje się nie robić tego rozróżnienia podczas budowania pliku wykonywalnego; wydaje się, że robi to samo optymalizowanie i łączenie dla 'module Main (main) gdzie' jako 'module Main where' również. – jdeseno