Помогает ли компилятор оптимизировать работу или просто избыточная работа для добавления дополнительных подписей типа? Например, часто можно увидеть:
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.