ScalaZ 和 Cats 都具有类型类和数据类型的概念。
虽然我了解类型类和类型类实例,但我不了解它们对术语“数据类型”的使用。
像 Kleisi
或 Either
这样的东西被称为 “数据类型” - 为什么?我的理解是它们是“可能”使用这些类型类实现的通用功能,但是即使在 Scala 中的 FP 编程一书中,它们也没有被称为 “数据类型”。
不知道这个词是怎么来的?
例子:
最佳答案
我想说这主要是 Haskell 的影响:
- 您在 Haskell 中声明为
class
的所有内容都称为“类型类”,通常位于cats._
- 您在 Haskell 中声明为
data
的所有内容都称为“数据类型”,并以cats.data._
结尾
- 通常在 Haskell 中使用
instance
关键字实现的类型类的实例都在cats.instances._
“类型类”是一个保留短语,具有相当精确的含义:它是一种语言特性或设计模式,可以实现即席多态。它发生在多种语言中。实现细节可能有所不同(它内置在 Haskell 中,但通过 Scala 中具有(更高种类的)类型参数的类进行模拟),但本质或多或少是相同的。
“数据类型”似乎没有任何如此精确的含义——至少它与“代数数据类型”或“广义代数数据类型”不同。我目前的猜测是,它或多或少是“在 Haskell 中使用 data
关键字声明的所有内容”的通俗术语,因此,本质上,它只是代表某些数据结构的一堆类可以以类型安全的方式使用和组合。
关于scala - scala 中的函数库(如 Cats 和 ScalaZ)中的类型类与数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56877695/