我从《Learn You A Haskell For Great Good》的第9章中学到,按照惯例,我们通常不会为main
指定类型声明。
据我所知,这种惯例很普遍。但是,如果我编译一个缺少对
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
的类型签名确实是多余的,为什么没有它会导致GHC在缺失时发出警告?除了消除警告之外,是否还有指定main
类型的好理由?
main
提供类型注释,以减少演示中的混乱。他们并没有暗示您不应该对其进行注释。 - chimain
指定一个明确的类型签名非常有用。 - shang