[#] [Перевод] Неупакованные типы объединений в Scala на основе изоморфизма Карри-Ховарда
habrabot(difrex,1) — All
2015-11-01 16:00:03


_Примечание переводчика. В будущей версии Scala (“Don Giovanni”) [анонсирована][1] поддержка типов объединения (union types). Miles Sabin, широко известный в узких кругах как создатель Shapeless, демонстрирует в [этой][2] статье 2011 года, как создать типы объединения уже сейчас. **UPD**. Представленный в статье подход не позволяет получить настоящих типов объединения и кроме того может существенно повлиять на время компиляции. Типы пересечения (`A with B`), использованные в статье, также отличаются от классических, поскольку не обладают свойством коммутативности. Подробности об экспериментальном проекте Dotty, в рамках которого будут решены эти и другие проблемы, можно посмотреть в замечательной [презентации][3] Дмитрия Петрашко [darkdimius][4] — разработчика компилятора Scala в EPFL._ Scala имеет очень выразительную систему типов. Однако она не включает (по крайней мере как примитивы) всех вожделенных элементов. Есть несколько поистине полезных типов, подпадающих под эту категорию — это типы полиморфных функций высшего ранга (higher-rank) и рекурсивные структурные типы. Но о них я расскажу подробнее в следующих постах, а сегодня я собираюсь показать вам, как в Scala мы можем создать типы объединения (union types). В ходе объяснения я пролью немного света на изоморфизм Карри-Ховарда и покажу, как использовать его в наших целях.



[Читать дальше →][5]

[1]: http://www.scala-lang.org/news/roadmap-next
[2]: http://milessabin.com/blog/2011/06/09/scala-union-types-curry-howard/
[3]: https://d-d.me/scalaworld2015/#/
[4]: http://habrahabr.ru/users/darkdimius/
[5]: http://habrahabr.ru/post/269907/#habracut