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