使用 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 中通常不是问题?
最佳答案
我会让一切尽可能通用。如果您遇到性能问题,您可以开始考虑搞乱具体的实现,但恕我直言,这不会经常成为问题,如果这确实出现问题,那么也许您的性能需求将与考虑进入命令式领域一样大再次;)
关于haskell - 我应该总是更喜欢更通用的类型而不是特定的类型吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7656767/