ScalaZ和Cats都具有类型类和数据类型的概念。
尽管我了解类型类和类型类实例,但我不理解它们对术语“数据类型” 的使用。
诸如Kleisi
或Either
之类的东西称为“数据类型” -为什么?我的理解是,它们是使用这些类型类“可能”实现的通用功能,但是,即使在《 Scala FP编程》一书中,它们也不被称为“数据类型” 。
我想知道这个词来自哪里吗?
示例:
答案 0 :(得分:6)
我会说这主要是Haskell的影响:
class
的所有内容都称为“类型类”,通常位于cats._
data
的所有内容都称为“数据类型”,并以cats.data._
结尾instance
关键字实现的类型类的实例都在cats.instances._
“类型类”是一个保留的短语,具有相当精确的含义:它是一种语言功能或设计模式,可以实现即席多态。它以多种语言出现。实现细节可能有所不同(它是Haskell内置的,但是通过Scala中具有(较高种类的)类型参数的类进行模拟),但是本质或多或少是相同的。
“数据类型”似乎没有任何确切的含义-至少它与“代数数据类型”或“广义代数数据类型”不在同一个联盟中。我目前的猜测是,“您在Haskell中用data
关键字声明的所有内容”或多或少是一个口语化的术语,因此,从本质上讲,它只是一堆类,它们代表可以以类型安全的方式使用和组成。