Итак, насколько я понимаю, существует два типа алгебраических типов данных (ADT). В случае Option[T] в Scala или Optional<T> в Java, будет ли это примером типа суммы или типа продукта?

0
uh_big_mike_boi 26 Ноя 2017 в 05:12

1 ответ

Лучший ответ

Определение типа Option[T] в Haskell дает понять, что это тип суммы.

data Option t = None | Some t

Значения типа Option t могут быть одним из двух:

  1. None
  2. Some t

Итак, Option[T] и Optional<T> оба берут тип T, а затем добавляют еще одно возможное значение (None).


Ради интереса мы также можем перевести этот ADT в алгебраическое уравнение:

Option(t) = 1 + t

Чтобы понять, почему, просмотрите этот вопрос: Злоупотребление алгеброй алгебраических типов данных - почему это работает?

2
4castle 26 Ноя 2017 в 02:40