Всегда ли я предпочитаю более общие типы конкретным типам?

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

Редактировать:

С точки зрения удобства использования / компоновки я понимаю, что более общий вариант всегда лучше, меня больше интересует влияние этого на скомпилированный код. Могу ли я слишком сильно абстрагироваться от моего кода? Или это обычно не проблема в Haskell?

9
задан Adam Wagner 5 October 2011 в 04:55
поделиться