它是否有助于编译器进行优化,或者只是添加额外的类型签名的多余工作?例如,人们经常看到:
foo :: a -> b
foo x = bar x
where bar x = undefined
而不是:
foo :: a -> b
foo x = bar x
where bar :: a -> b
bar x = undefined
如果我省略了顶级类型签名,GHC 会给我一个警告,所以如果我没有收到警告,我很有信心我的程序是正确的。但是,如果我在 where 子句中省略签名,则不会发出警告。