Сумма или тип продукта?

Учитывая следующий алгебраический тип данных:

scala> sealed trait Person
defined trait Person

scala> case class Boy(name: String, age: Int, x: String) extends Person
defined class Boy

scala> case class Girl(name: String, age: Int, y: Boolean) extends Person
defined class Girl

Примечание. Я знаю, что это не рекурсивный тип - в нем нет никакой рекурсии.

Итак, это Sum или Product Type? Почему?


person Kevin Meredith    schedule 10.06.2015    source источник
comment
И то, и другое - это сумма продуктов. Возможно, хорошей отправной точкой станет статья в Википедии о ADT.   -  person Travis Brown    schedule 10.06.2015
comment
Также обратите внимание, что он может быть рекурсивным и по-прежнему представлять собой сумму произведений.   -  person Travis Brown    schedule 10.06.2015
comment
@TravisBrown: вы должны опубликовать это в качестве ответа.   -  person Kim Stebel    schedule 10.06.2015
comment
@TravisBrown - case object или case class с одним аргументом составляют Sum Type class в Scala?   -  person Kevin Meredith    schedule 10.06.2015
comment
@KevinMeredith Вы можете думать о сумме как о или - a Person это Boy или a Girl в этой модели. и является продуктом - тип данных Boy состоит из имени и возраста и строки x.   -  person Travis Brown    schedule 10.06.2015


Ответы (1)


В этом случае Person можно рассматривать как тип суммы, поскольку его экземпляром является либо Boy, либо Girl.

Boy (или Girl) - это тип продукта, поскольку экземпляр Boy представляет собой комбинацию типов String, Int и String.

Вот очень хорошая статья об этом "гибридном" случае Алгебраические типы данных в Scala

person Minh Thai    schedule 08.08.2018