2012-06-20 7 views
24

La specifica Haskell 98 dice che il punto di ingresso di un programma, vale a dire la funzione main, deve risiedere nel modulo chiamato Main, per convenzione. Tuttavia, anche se non si scrive32 nella parte superiore del file in cui si scrive main, il codice sorgente viene compilato e sembra funzionare correttamente quando si utilizza GHC.Per scrivere o non scrivere `modulo Main where` in Haskell

La domanda è:

  1. Qual è la differenza tra la scrittura module Main where e non scriverlo?
  2. Quale preferisci?

risposta

22

Non c'è davvero alcuna differenza, module Main (main) where sarebbe la definizione implicita quando non si specifica un'intestazione. Dalla Haskell 98 Report:

Una forma abbreviata di modulo, composto solo da corpo del modulo, è consentito. Se viene utilizzato, l'intestazione è assunta per essere module Main(main) where.

Preferirei una definizione esplicita ad una implicita ma, per una Main.hs è una preferenza minore.

+8

La differenza è che senza l'intestazione del modulo, viene esportato solo 'main', ma con' module Main where' viene esportata ogni definizione di livello superiore. Sembra che i tuoi occhi vedessero 'modulo Main (principale) dove' dove non era presente alcuna lista di esportazione;) –

+4

È importante avere la lista di esportazione' (main) ', perché ciò consente al compilatore di ottimizzare di più. – augustss

+0

@DanielFischer @augustss Non riesco a trovare alcuna documentazione per supportarlo. GHC non sembra fare quella distinzione quando costruisce un eseguibile; sembra fare lo stesso ottimizzazione e collegamento per 'modulo Main (main) where' come' module Main where'. – jdeseno