- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我曾经在 haskell beginners 上问过一个问题, 是使用 data/newtype 还是 typeclass。在我的特殊情况下,事实证明不需要类型类。此外,Tom Ellis 给了我一个绝妙的建议,当有疑问时该怎么做:
The simplest way of answering this which is mostly correct is:
use data
Use type classes if:
There is only one correct behavior per given type
The type class has associated equations (i.e. "laws") that all instances must satisfy
最佳答案
在大多数情况下,类型类是无关紧要的。任何类型类代码都可以机械转换为 dictionary-passing风格。它们主要提供便利,有时提供必要的便利(参见 kmett 的回答)。
有时类型类的单实例属性用于强制执行不变量。例如,您无法转换 Data.Set
安全地进入字典传递样式,因为如果你用两个不同的 Ord
插入两次字典,你可以打破数据结构的不变性。当然,您仍然可以将任何工作代码转换为字典传递样式的工作代码,但您将无法取缔尽可能多的损坏代码。
法律是 typeclass 的另一个重要文化方面。编译器不强制执行法律,但 Haskell 程序员希望类型类具有所有实例都满足的法律。这可以是 leveraged为某些功能提供更严格的保证。这种优势仅来自社区的约定,而不是语言的正式属性。
关于haskell - 类型类是必不可少的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25855507/
我是一名优秀的程序员,十分优秀!