Я узнал из глава 9 "Узнайте, что вы Haskell For Great Good",
По соглашению мы обычно не указываем объявление типа для
main
.
Насколько я могу судить, эта конвенция широко распространена. Однако, если я скомпилирую, используя флаг -Wall
, программу, которая не имеет сигнатуры типа для main
, например
-- test.hs
-- main :: IO ()
main = print (1 :: Int)
GHC выдает предупреждение:
$ 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 ...
$
Я запутался... Если сигнатура типа для main
действительно лишняя, почему -Wall
заставляет GHC жаловаться, когда она отсутствует? Есть ли веские причины (кроме устранения этого предупреждения) для указания типа main
?