Классы типов против типов данных в функциональных библиотеках в Scala, таких как Cats и ScalaZ - PullRequest
3 голосов
/ 03 июля 2019

ScalaZ и Cats оба имеют это понятие класса типов и типов данных.

Хотя я понимаю классы типов и экземпляры классов типов, я не понимаю, как они используют термин "типы данных" .

Такие вещи, как Kleisi или Either называются «Типы данных» - почему? Насколько я понимаю, это общие функциональные возможности, реализованные «вероятно» с использованием этих классов типов, однако даже в книге «Программирование на языке FP в Scala» они не упоминаются как «Типы данных» .

Интересно, откуда взялся этот термин?

Примеры:

1 Ответ

6 голосов
/ 04 июля 2019

Я бы сказал, что это в основном влияние Хаскелла:

  • все, что вы объявите как class в Хаскеле, называется "типом класса" и обычно находится в cats._
  • все, что вы объявите в Haskell как data, называется «типом данных» и заканчивается в cats.data._
  • экземплярах классов типов, которые вы обычно реализуете с ключевым словом instance в Haskellвсе в cats.instances._

«Класс класса» - это зарезервированная фраза с довольно точным значением: это своего рода языковая особенность или шаблон дизайна, который допускает специальный полиморфизм.Это происходит на нескольких языках.Детали реализации могут различаться (это встроено в Haskell, но имитируются с помощью классов с параметрами типа выше в Scala), но суть более или менее та же.

«Тип данных» делаеткажется, не имеет такого точного значения - по крайней мере, он не находится в той же лиге, что и «алгебраические типы данных» или «обобщенные алгебраические типы данных».Мое текущее предположение состоит в том, что это более или менее разговорный термин для «всего, что вы бы объявили с помощью ключевого слова data в Haskell», так что, по сути, это просто набор классов, представляющих некоторые структуры данных, которые можно использовать исоставлено безопасным для типов образом.

...