我是否应该总是喜欢更一般的类型到特定类型?

Ada*_*ner 9 polymorphism haskell ghc

编译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
Run Code Online (Sandbox Code Playgroud)

这只是因为我的例子是多么微不足道/做作,或者当程序变得更复杂时这是否成立?

另外,有没有什么好的理由避免让我的类型尽可能通用?我通常会尝试在不需要它的地方保留详细信息,但我并不十分熟悉这对编译语言的影响,尤其是Haskell/GHC.

边注:

我似乎回想起最近的一个问题,答案是为了改善某些性能问题而使类型更具体,尽管我现在找不到它,所以我可能已经想到了它.

编辑:

我从可用性/可组合性的角度理解,更一般的总是更好,我对它对编译代码的影响更感兴趣.我是否有可能过于急切地抽象我的代码?或者这通常不是Haskell的问题?

Car*_*ten 7

我会去做尽可能一般的一切.如果你遇到性能问题,你可以开始考虑搞乱具体的实现,但恕我直言这不会经常出现问题,如果真的遇到问题,那么你的性能需求可能会考虑进入势在必行的领域再次;)