Скомпилированные с ghc --make
, эти две программы производят одинаковые двоичные файлы:
-- id1a.hs
main = print (id' 'a')
id' :: a -> a
id' x = x
-- id1b.hs
main = print (id' 'a')
id' :: Char -> Char
id' x = x
Это просто из-за того, насколько тривиален / надуманен мой пример, или это верно, когда программы становятся более сложными?
Кроме того, есть ли веская причина, чтобы не делать мои типы как можно более общими?Я обычно стараюсь держать детали там, где они мне не нужны, но я не очень хорошо знаком с эффектами этого на скомпилированных языках, особенно на Haskell / GHC.
Примечание:
Кажется, я вспоминаю недавний вопрос SO, где ответом было сделать тип более конкретным, чтобы улучшить проблему с производительностью, хотя я не могу найти его сейчас, поэтому я мог себе это представить.
Редактировать:
С точки зрения юзабилити / возможности компоновки я понимаю, что более общий всегда лучше, меня больше интересует влияние, которое это оказывает на скомпилированный код,Могу ли я слишком стремиться абстрагировать свой код?Или это обычно не проблема в Хаскеле?