haskell - 我应该总是更喜欢更通用的类型而不是特定的类型吗?

标签 haskell polymorphism 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

这只是因为我的例子是多么琐碎/做作,还是因为这个 随着程序变得更加复杂,这是否成立?

此外,是否有任何充分的理由避免使我的类型像 可能的?我通常会尝试在不需要的地方保留细节,但是 我不太熟悉这对编译语言的影响, 特别是 Haskell/GHC。

旁注:

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

编辑:

从可用性/可组合性的角度来看,我理解越通用总是更好,我对这对编译代码的影响更感兴趣。我是否可能太热衷于抽象我的代码?或者这在 Haskell 中通常不是问题?

最佳答案

我会让一切尽可能通用。如果您遇到性能问题,您可以开始考虑搞乱具体的实现,但恕我直言,这不会经常成为问题,如果这确实出现问题,那么也许您的性能需求将与考虑进入命令式领域一样大再次;)

关于haskell - 我应该总是更喜欢更通用的类型而不是特定的类型吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7656767/

相关文章:

multithreading - 为什么 `-threaded` 让它变慢?

haskell - 为什么默认情况下 forall(RankNTypes 用法)不适用?

haskell - 将 Haskell IO 列表转换为列表类型

haskell - thunk 使用多少内存?

haskell - 使用括号来消除类似 `liftM b ap c` 的表达式的歧义

C++ 避免重新定义需要返回多态类型的代码

c++ - 如何在抽象类中声明重载运算符并在派生的非抽象类中覆盖它?

c++ - 错误 - 变量类型 "X"是一个抽象类 - C++

haskell - 如何将 GHC 中的缺失字段警告更改为错误

haskell - 无法在 Windows 上使用 cabal 安装 cairo - 如何在 win 上获取 pkg-config?