Скала Изоморфные Типы

Читая этот пост в блоге от Chuusai, он говорит:

def size(x : Either[Int, String]) = x match {
  case Left(i) => i
  case Right(s) => s.length
}

size(Left(23)) == 23    // OK
size(Right("foo")) == 3 // OK

Либо [Int, String] может моделировать тип объединения Int ∨ String, поскольку существует изоморфизм между двумя типами и их значениями.

Что означает "изоморфизм между двумя типами и их значениями"?

1 ответ

Сначала вы должны определить термин "ценности" в контексте Scala. Я предполагаю, что это означает канонические выражения с этим типом, выражения вида Left (n) или Right (s) для постоянного целого числа n или строки s. Тогда изоморфизм - это прямое отображение на математический тип Int ∪ String. Но что, например, ноль или право (ноль)? У них есть изображения под этим отображением? Не кажется мне полностью изоморфным.

Другие вопросы по тегам