Изоморфные типы Scala

Читая этот блог пост от 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, поскольку существует изоморфизм между двумя типами и их значениями.

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


person Kevin Meredith    schedule 30.01.2014    source источник
comment
Вы имеете в виду изоморфизм Карри-Ховарда и хорошее объяснение здесь: en.wikibooks.org/wiki/ Haskell/The_Curry-Howard_isomorphism   -  person Yuriy    schedule 30.01.2014


Ответы (1)


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

person Judge Mental    schedule 30.01.2014