ho imparato da chapter 9 of Learn You A Haskell For Great Good cheSi dovrebbe specificare una firma di tipo per principale o no? Perché perché no?
Per convenzione, che facciamo di solito non specificare una dichiarazione di tipo per
main
.
Per quanto posso dire, questa convenzione è diffusa. Tuttavia, se compilo, utilizzando il flag -Wall
, un programma che manca di una firma tipo per main
, come ad esempio
-- test.hs
-- main :: IO()
main = print (1 :: Int)
GHC non emettere un avviso:
$ ghc -Wall test.hs
[1 of 1] Compiling Main (test.hs, test.o)
test.hs:2:1: Warning:
Top-level binding with no type signature: main :: IO()
Linking test ...
$
Sono confuso ... Se una firma di tipo per main
è davvero superflua, perché -Wall
fa in modo che GHC si lamenti quando manca? Ci sono dei buoni motivi (oltre a eliminare questo avviso) per specificare il tipo di main
?
La firma del tipo di livello superiore mancante dovrebbe essere un errore. In realtà dovrebbe essere illegale. – Shoe
Illegale come in dovrebbe essere punibile come crimine. Non illegale nella lingua. – Shoe
In particolare, la firma del tipo * esportato * di livello superiore potrebbe essere un errore. Uso molti helper generici che non vengono esportati, non dispongono di documenti pubblici e le loro firme sono più lunghe dei loro corpi. Scriverli non aiuta affatto ed è solo un fastidio. –