Я бы сказал, что это в основном влияние Хаскелла:
- все, что вы объявите как
class
в Хаскеле, называется "типом класса" и обычно находится в cats._
- все, что вы объявите в Haskell как
data
, называется «типом данных» и заканчивается в cats.data._
- экземплярах классов типов, которые вы обычно реализуете с ключевым словом
instance
в Haskellвсе в cats.instances._
«Класс класса» - это зарезервированная фраза с довольно точным значением: это своего рода языковая особенность или шаблон дизайна, который допускает специальный полиморфизм.Это происходит на нескольких языках.Детали реализации могут различаться (это встроено в Haskell, но имитируются с помощью классов с параметрами типа выше в Scala), но суть более или менее та же.
«Тип данных» делаеткажется, не имеет такого точного значения - по крайней мере, он не находится в той же лиге, что и «алгебраические типы данных» или «обобщенные алгебраические типы данных».Мое текущее предположение состоит в том, что это более или менее разговорный термин для «всего, что вы бы объявили с помощью ключевого слова data
в Haskell», так что, по сути, это просто набор классов, представляющих некоторые структуры данных, которые можно использовать исоставлено безопасным для типов образом.