{"id":267232,"date":"2015-11-01T01:23:13","date_gmt":"2015-10-31T22:23:13","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=267232"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=267232","title":{"rendered":"\u041d\u0435\u0443\u043f\u0430\u043a\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0442\u0438\u043f\u044b \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0439 \u0432 Scala \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0438\u0437\u043e\u043c\u043e\u0440\u0444\u0438\u0437\u043c\u0430 \u041a\u0430\u0440\u0440\u0438-\u0425\u043e\u0432\u0430\u0440\u0434\u0430"},"content":{"rendered":"<p>       <i>\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435 \u043f\u0435\u0440\u0432\u043e\u0434\u0447\u0438\u043a\u0430. \u0412 \u0431\u0443\u0434\u0443\u0449\u0435\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 Scala \u0430\u043d\u043e\u043d\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u0430 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0442\u0438\u043f\u043e\u0432 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f (union types). Miles Sabin, \u0448\u0438\u0440\u043e\u043a\u043e\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0439 \u0432 \u0443\u0437\u043a\u0438\u0445 \u043a\u0440\u0443\u0433\u0430\u0445 \u043a\u0430\u043a \u0441\u043e\u0437\u0434\u0430\u0442\u0435\u043b\u044c Shapeless, \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u0442 \u0432 <a href=\"http:\/\/milessabin.com\/blog\/2011\/06\/09\/scala-union-types-curry-howard\/\">\u044d\u0442\u043e\u0439<\/a> \u0441\u0442\u0430\u0442\u044c\u0435 2011 \u0433\u043e\u0434\u0430, \u043a\u0430\u043a \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0442\u0438\u043f\u044b \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u0443\u0436\u0435 \u0441\u0435\u0439\u0447\u0430\u0441.<\/i><\/p>\n<p>  Scala \u0438\u043c\u0435\u0435\u0442 \u043e\u0447\u0435\u043d\u044c \u0432\u044b\u0440\u0430\u0437\u0438\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0442\u0438\u043f\u043e\u0432. \u041e\u0434\u043d\u0430\u043a\u043e \u043e\u043d\u0430 \u043d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 (\u043f\u043e \u043a\u0440\u0430\u0439\u043d\u0435\u0439 \u043c\u0435\u0440\u0435 \u043a\u0430\u043a \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u044b) \u0432\u0441\u0435\u0445 \u0432\u043e\u0436\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432. \u0415\u0441\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0438\u0441\u0442\u0438\u043d\u0435 \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432, \u043f\u043e\u0434\u043f\u0430\u0434\u0430\u044e\u0449\u0438\u0445 \u043f\u043e\u0434 \u044d\u0442\u0443 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u044e \u2014 \u044d\u0442\u043e \u0442\u0438\u043f\u044b \u043f\u043e\u043b\u0438\u043c\u043e\u0440\u0444\u043d\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0432\u044b\u0441\u0448\u0435\u0433\u043e \u0440\u0430\u043d\u0433\u0430 (higher-rank) \u0438 \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u044b\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043d\u044b\u0435 \u0442\u0438\u043f\u044b. \u041d\u043e \u043e \u043d\u0438\u0445 \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u043f\u043e\u0441\u0442\u0430\u0445, \u0430 \u0441\u0435\u0433\u043e\u0434\u043d\u044f \u044f \u0441\u043e\u0431\u0438\u0440\u0430\u044e\u0441\u044c \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0432\u0430\u043c, \u043a\u0430\u043a \u0432 Scala \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0442\u0438\u043f\u044b \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f (union types). \u0412 \u0445\u043e\u0434\u0435 \u043e\u0431\u044a\u044f\u0441\u043d\u0435\u043d\u0438\u044f \u044f \u043f\u0440\u043e\u043b\u044c\u044e \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0441\u0432\u0435\u0442\u0430 \u043d\u0430 \u0438\u0437\u043e\u043c\u043e\u0440\u0444\u0438\u0437\u043c \u041a\u0430\u0440\u0440\u0438-\u0425\u043e\u0432\u0430\u0440\u0434\u0430 \u0438 \u043f\u043e\u043a\u0430\u0436\u0443, \u043a\u0430\u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0432 \u043d\u0430\u0448\u0438\u0445 \u0446\u0435\u043b\u044f\u0445.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/427\/70e\/d92\/42770ed92098475fac9f4632be73e3d5.jpg\" \/><\/div>\n<p>  <a name=\"habracut\"><\/a><br \/>  \u0418\u0442\u0430\u043a, \u0434\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430, \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u0442\u0438\u043f \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f? \u0422\u0438\u043f \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u044d\u0442\u043e \u0432\u043e \u043c\u043d\u043e\u0433\u043e\u043c \u0442\u043e, \u0447\u0435\u0433\u043e \u0432\u044b \u043e\u0442 \u043d\u0435\u0433\u043e \u043e\u0436\u0438\u0434\u0430\u0435\u0442\u0435: \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0434\u0432\u0443\u0445 (\u0438\u043b\u0438 \u0431\u043e\u043b\u044c\u0448\u0435, \u043d\u043e \u044f \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0443\u0441\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u0432\u0443\u043c\u044f) \u0442\u0438\u043f\u043e\u0432. \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u044d\u0442\u043e\u0433\u043e \u0442\u0438\u043f\u0430 \u0432\u043a\u043b\u044e\u0447\u0430\u044e\u0442 \u0432\u0441\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0438\u0437 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u044f\u0435\u043c\u044b\u0445 \u0442\u0438\u043f\u043e\u0432. \u0427\u0442\u043e \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442 \u043d\u0430\u043c \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u044f\u0441\u043d\u0438\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u0440, \u043d\u043e \u0434\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0432\u0432\u0435\u0434\u0451\u043c \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439. \u041f\u043e \u043f\u0440\u0438\u0447\u0438\u043d\u0430\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u0442\u0430\u043d\u0443\u0442 \u0432\u0441\u043a\u043e\u0440\u0435 \u043f\u043e\u043d\u044f\u0442\u043d\u044b, \u044f \u0431\u0443\u0434\u0443 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0442\u0438\u043f\u043e\u0432 <code>T<\/code> \u0438 <code>U<\/code> \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u0438\u043c\u0432\u043e\u043b\u0430 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0418\u041b\u0418: <code>T \u2228 U<\/code>. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0442\u0438\u043f\u043e\u0432 <code>Int<\/code> \u0438 <code>String<\/code> \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u043a <code>Int \u2228 String<\/code>. \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u044d\u0442\u043e\u0433\u043e \u0442\u0438\u043f\u0430 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u0432\u043a\u043b\u044e\u0447\u0430\u044e\u0442 \u0432\u0441\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0442\u0438\u043f\u0430 <code>Int<\/code> \u0438 \u0432\u0441\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0442\u0438\u043f\u0430 <code>String<\/code>.<\/p>\n<p>  \u041d\u043e \u0447\u0442\u043e \u0436\u0435 \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442 \u0431\u043e\u043b\u0435\u0435 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e? \u0410 \u0437\u043d\u0430\u0447\u0438\u0442 \u044d\u0442\u043e \u0442\u043e, \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u0431\u044b \u043c\u044b \u0438\u043c\u0435\u043b\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0432\u044b\u0440\u0430\u0437\u0438\u0442\u044c \u0442\u0430\u043a\u043e\u0439 \u0442\u0438\u043f \u0432 Scala, \u0442\u043e \u043c\u044b \u0441\u043c\u043e\u0433\u043b\u0438 \u0431\u044b, \u043a \u043f\u0440\u0438\u043c\u0435\u0440\u0443, \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0442\u0430\u043a:  <\/p>\n<pre><code class=\"scala\">def size(x: Int \u2228 String) = x match {   case i: Int =&gt; i   case s: String =&gt; s.length }  size(23) == 23   \/\/ OK size(&quot;foo&quot;) == 3 \/\/ OK size(1.0)        \/\/ \u041d\u0435 OK, \u043e\u0448\u0438\u0431\u043a\u0430 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 <\/code><\/pre>\n<p>  \u0414\u0440\u0443\u0433\u0438\u043c\u0438 \u0441\u043b\u043e\u0432\u0430\u043c\u0438, \u043c\u0435\u0442\u043e\u0434 <code>size<\/code> \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b \u043b\u0438\u0431\u043e \u0442\u0438\u043f\u0430 <code>Int<\/code>, \u043b\u0438\u0431\u043e \u0442\u0438\u043f\u0430 <code>String<\/code> (\u0432\u043a\u043b\u044e\u0447\u0430\u044f \u0438\u0445 \u043f\u043e\u0434\u0442\u0438\u043f\u044b <code>Null<\/code> \u0438 <code>Nothing<\/code>), \u0438 \u043d\u0438\u043a\u0430\u043a\u0438\u0435 \u0434\u0440\u0443\u0433\u0438\u0435.<\/p>\n<p>  \u0412\u0430\u0436\u043d\u043e \u043f\u043e\u0434\u0447\u0435\u0440\u043a\u043d\u0443\u0442\u044c \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043c\u0435\u0436\u0434\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u044d\u0442\u043e\u0433\u043e \u0442\u0438\u043f\u0430 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u0438 \u0441\u0442\u0430\u043d\u0430\u0434\u0430\u0440\u0442\u043d\u043e\u0433\u043e <code>Either<\/code>. <code>Either<\/code>, \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0439 \u043a\u0430\u043a \u0442\u0438\u043f \u0441\u0443\u043c\u043c\u044b (sum type), \u044d\u0442\u043e \u0430\u043d\u0430\u043b\u043e\u0433 \u0442\u0438\u043f\u0430 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u0432 \u044f\u0437\u044b\u043a\u0430\u0445 \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0449\u0438\u0445 \u043f\u043e\u0434\u0442\u0438\u043f\u044b. \u041f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u043d\u0438\u0435 \u043d\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c <code>Either<\/code> \u0434\u0430\u0441\u0442 \u043d\u0430\u043c:  <\/p>\n<pre><code class=\"scala\">def size(x: Either[Int, String]) = x match {   case Left(i) =&gt; i   case Right(s) =&gt; s.length }  size(Left(23)) == 23    \/\/ OK size(Right(&quot;foo&quot;)) == 3 \/\/ OK <\/code><\/pre>\n<p>  \u0422\u0438\u043f <code>Either[Int, String]<\/code> \u043c\u043e\u0436\u0435\u0442 \u043c\u043e\u0434\u0435\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u0438\u043f \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f <code>Int \u2228 String<\/code>, \u0442\u0430\u043a \u043a\u0430\u043a \u043c\u0435\u0436\u0434\u0443 \u043d\u0438\u043c\u0438 \u0438 \u0438\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0435 (\u0438\u0437\u043e\u043c\u043e\u0440\u0444\u0438\u0437\u043c). \u041e\u0434\u043d\u0430\u043a\u043e \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u044f\u0441\u043d\u043e, \u0447\u0442\u043e \u0442\u0438\u043f <code>Either<\/code> \u0434\u043e\u0431\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u044d\u0442\u043e\u0433\u043e \u0431\u0443\u0434\u0443\u0447\u0438 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u0443\u0440\u043e\u0432\u043d\u0435\u043c \u0443\u043f\u0430\u043a\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e (boxed) \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f, \u0430 \u043d\u0435 \u043a\u0430\u043a \u043d\u0435\u0443\u043f\u0430\u043a\u043e\u0432\u0430\u043d\u043d\u044b\u0439 (unboxed) \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0442\u0438\u043f\u043e\u0432. \u041c\u043e\u0436\u0435\u043c \u043b\u0438 \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043d\u0435\u0447\u0442\u043e \u043b\u0443\u0447\u0448\u0435\u0435, \u0447\u0435\u043c <code>Either<\/code>? \u041c\u043e\u0436\u0435\u043c \u043b\u0438 \u043c\u044b \u043d\u0430\u0439\u0442\u0438 \u0441\u043f\u043e\u0441\u043e\u0431 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0442\u0438\u043f\u043e\u0432 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u0432 Scala \u0431\u0435\u0437 \u043f\u0440\u0438\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u044f \u0443\u043f\u0430\u043a\u043e\u0432\u043a\u0438 \u0438 \u0441\u043e \u0432\u0441\u0435\u043c\u0438 \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u044b\u043c\u0438 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u044f\u043c\u0438?<\/p>\n<p>  \u041e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u043c\u044b \u043c\u043e\u0436\u0435\u043c, \u043d\u043e \u043d\u0430 \u043f\u0443\u0442\u0438 \u043a \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0443 \u043d\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u043e\u0432\u0435\u0440\u0448\u0438\u0442\u044c \u043e\u0431\u044a\u0435\u0437\u0434 \u0447\u0435\u0440\u0435\u0437 \u043b\u043e\u0433\u0438\u043a\u0443 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u043f\u043e\u0440\u044f\u0434\u043a\u0430 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <a href=\"https:\/\/en.wikipedia.org\/wiki\/Curry%E2%80%93Howard_correspondence\">\u0438\u0437\u043e\u043c\u043e\u0440\u0444\u0438\u0437\u043c\u0430 \u041a\u0430\u0440\u0440\u0438-\u0425\u043e\u0432\u0430\u0440\u0434\u0430<\/a>. \u0414\u0430\u043d\u043d\u044b\u0439 \u0438\u0437\u043e\u043c\u043e\u0440\u0444\u0438\u0437\u043c \u0433\u043e\u0432\u043e\u0440\u0438\u0442 \u043d\u0430\u043c, \u0447\u0442\u043e \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f \u043c\u0435\u0436\u0434\u0443 \u0442\u0438\u043f\u0430\u043c\u0438 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u0442\u0438\u043f\u043e\u0432 \u043c\u043e\u0433\u0443\u0442 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c\u044f \u043a\u0430\u043a \u043e\u0431\u0440\u0430\u0437 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0439 \u043c\u0435\u0436\u0434\u0443 \u0432\u044b\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u043d\u0438\u044f\u043c\u0438 \u0432 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 (\u0438 \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442). \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u043e\u0435 \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0435 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u043c\u0438 \u0441\u043f\u043e\u0441\u043e\u0431\u0430\u043c\u0438 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0442\u043e\u0433\u043e, \u043e \u043a\u0430\u043a\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u0442\u0438\u043f\u043e\u0432 \u043c\u044b \u0433\u043e\u0432\u043e\u0440\u0438\u043c, \u0438 \u043a\u0430\u043a\u0443\u044e \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u043c\u044b \u0432\u044b\u0431\u0440\u0430\u043b\u0438, \u043d\u043e \u0434\u043b\u044f \u0434\u043b\u044f \u043d\u0430\u0448\u0435\u0433\u043e \u043e\u0431\u0441\u0443\u0436\u0434\u0435\u043d\u0438\u044f \u044f \u043f\u0440\u043e\u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u044e \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0434\u0435\u0442\u0430\u043b\u0435\u0439 \u0438 \u0441\u043e\u0441\u0440\u0435\u0434\u043e\u0442\u043e\u0447\u0443\u0441\u044c \u043d\u0430 \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u0445.<\/p>\n<p>  \u041f\u0440\u043e\u0438\u043b\u043b\u044e\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u043c \u0438\u0437\u043e\u043c\u043e\u0440\u0444\u0438\u0437\u043c \u041a\u0430\u0440\u0440\u0438-\u0425\u043e\u0432\u0430\u0440\u0434\u0430 \u0432 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0442\u0438\u043f\u043e\u0432 \u0441 \u043f\u043e\u0434\u0442\u0438\u043f\u0430\u043c\u0438 \u043a\u0430\u043a \u0432 Scala. \u041c\u043e\u0436\u043d\u043e \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0435 \u043c\u0435\u0436\u0434\u0443 \u0442\u0438\u043f\u0430\u043c\u0438 \u043f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u044f (<code>A with B<\/code>) \u0438 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043a\u043e\u043d\u044a\u044e\u043d\u043a\u0446\u0438\u0435\u0439 (<code>A \u2227 B<\/code>); \u043c\u0435\u0436\u0434\u0443 \u043c\u043e\u0438\u043c\u0438 \u0433\u0438\u043f\u043e\u0442\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438 \u0442\u0438\u043f\u0430\u043c\u0438 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f (<code>A \u2228 B<\/code>) \u0438 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0434\u0438\u0437\u044a\u044e\u043d\u043a\u0446\u0438\u0435\u0439 (\u0442\u0430\u043a \u0436\u0435 <code>A \u2228 B<\/code>, \u043d\u0430 \u0447\u0442\u043e \u0431\u044b\u043b \u0441\u0434\u0435\u043b\u0430\u043d \u043d\u0430\u043c\u0451\u043a \u0432\u044b\u0448\u0435); \u0438 \u043c\u0435\u0436\u0434\u0443 \u043f\u043e\u0434\u0442\u0438\u043f\u0430\u043c\u0438 (<code>A &lt;: B<\/code>) \u0438 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0438\u043c\u043f\u043b\u0438\u043a\u0430\u0446\u0438\u0435\u0439 (<code>A \u21d2 B<\/code>). \u0412 \u043b\u0435\u0432\u043e\u0439 \u043a\u043e\u043b\u043e\u043d\u043a\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u043e\u0439 \u043d\u0438\u0436\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u043c\u044b \u0438\u043c\u0435\u0435\u043c \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f \u043f\u043e\u0434\u0442\u0438\u043f\u043e\u0432 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0435 \u0432 Scala (\u043d\u043e \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0442\u0438\u043f\u043e\u0432 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u043d\u0435 \u0432\u044b\u0440\u0430\u0436\u0430\u0435\u043c\u044b\u0435 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0432 \u044f\u0437\u044b\u043a\u0435), \u0430 \u0432 \u043f\u0440\u0430\u0432\u043e\u0439 \u043a\u043e\u043b\u043e\u043d\u043a\u0435 \u043c\u044b \u0438\u043c\u0435\u0435\u043c \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0444\u043e\u0440\u043c\u0443\u043b\u044b \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0435 \u0438\u0437 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0439 \u043c\u0435\u0436\u0434\u0443 \u0442\u0438\u043f\u0430\u043c\u0438 \u0441\u043b\u0435\u0432\u0430 \u043f\u0443\u0442\u0451\u043c \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0437\u0430\u043c\u0435\u043d\u044b <code>with<\/code> \u043d\u0430 <code>\u2227<\/code> \u0438 <code>&lt;:<\/code> \u043d\u0430 <code>\u21d2<\/code>. \u0412 \u043a\u0430\u0436\u0434\u043e\u043c \u0438\u0437 \u0441\u043b\u0443\u0447\u0430\u0435\u0432 \u0442\u0430\u043a\u0430\u044f \u0437\u0430\u043c\u0435\u043d\u0430 \u0434\u0430\u0451\u0442 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u0435\u0440\u043d\u0443\u044e \u0444\u043e\u0440\u043c\u0443\u043b\u0443.  <\/p>\n<table>\n<tr>\n<td>(A with B) &lt;: A<\/td>\n<td>(A \u2227 B) \u21d2 A<\/td>\n<\/tr>\n<tr>\n<td>(A with B) &lt;: B<\/td>\n<td>(A \u2227 B) \u21d2 B<\/td>\n<\/tr>\n<tr>\n<td>A &lt;: (A \u2228 B)<\/td>\n<td>A \u21d2 (A \u2228 B)<\/td>\n<\/tr>\n<tr>\n<td>B &lt;: (A \u2228 B)<\/td>\n<td>B \u21d2 (A \u2228 B)<\/td>\n<\/tr>\n<\/table>\n<p>  \u0421\u0443\u0442\u044c \u0438\u0437\u043e\u043c\u043e\u0440\u0444\u0438\u0437\u043c\u0430 \u041a\u0430\u0440\u0440\u0438-\u0425\u043e\u0432\u0430\u0440\u0434\u0430 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043c\u0435\u0445\u0430\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0437\u0430\u043c\u0435\u043d\u044b \u0432\u0441\u0435\u0433\u0434\u0430 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0441\u0442\u044c \u2014 \u0432\u0435\u0440\u043d\u0430\u044f \u0442\u0438\u043f\u043e\u0432\u0430\u044f \u0444\u043e\u0440\u043c\u0443\u043b\u0430 \u0432\u0441\u0435\u0433\u0434\u0430 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u0432\u0435\u0440\u043d\u0443\u044e \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0444\u043e\u0440\u043c\u0443\u043b\u0443, \u0438 \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442. \u0418 \u044d\u0442\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u043a\u043e\u043d\u044a\u044e\u043d\u043a\u0446\u0438\u0438, \u0434\u0438\u0437\u044a\u044e\u043d\u043a\u0446\u0438\u0438 \u0438 \u0438\u043c\u043f\u043b\u0438\u043a\u0430\u0446\u0438\u0438. \u041c\u044b \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u0435\u043c \u043e\u0431\u043e\u0431\u0449\u0438\u0442\u044c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0435 \u043d\u0430 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0444\u043e\u0440\u043c\u0443\u043b\u044b \u0432\u043a\u043b\u044e\u0447\u0430\u044e\u0449\u0438\u0435 \u043e\u0442\u0440\u0438\u0446\u0430\u043d\u0438\u0435 (\u043a\u043b\u044e\u0447\u0435\u0432\u0430\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f \u0432 \u0441\u0435\u0433\u043e\u0434\u043d\u044f\u0448\u043d\u0435\u043c \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u0438\u0438) \u0438 \u043a\u0432\u0430\u043d\u0442\u043e\u0440\u044b \u043e\u0431\u0449\u043d\u043e\u0441\u0442\u0438 \u0438 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u044f.<\/p>\n<p>  \u0427\u0442\u043e \u0436\u0435 \u0431\u0443\u0434\u0435\u0442 \u0434\u043b\u044f \u043d\u0430\u0441 \u0437\u043d\u0430\u0447\u0438\u0442\u044c \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043e\u0442\u0440\u0438\u0446\u0430\u043d\u0438\u044f? \u041a\u043e\u043d\u044a\u044e\u043d\u043a\u0446\u0438\u044f \u0434\u0432\u0443\u0445 \u0442\u0438\u043f\u043e\u0432 (\u0442.\u0435. <code>A with B<\/code>) \u0438\u043c\u0435\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0430\u043c\u0438 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0438 <code>A<\/code>, \u0438 <code>B<\/code>. \u041f\u043e\u0434\u043e\u0431\u043d\u044b\u043c \u0436\u0435 \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0442\u044c, \u0447\u0442\u043e \u043e\u0442\u0440\u0438\u0446\u0430\u043d\u0438\u0435 \u0442\u0438\u043f\u0430 <code>A<\/code> (\u044f \u0431\u0443\u0434\u0443 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u043a\u0430\u043a <code>\u00ac[A]<\/code>) \u0434\u043e\u043b\u0436\u043d\u043e \u0438\u043c\u0435\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0430\u043c\u0438 \u0442\u0438\u043f\u0430 <code>A<\/code>. \u041e\u0442\u0440\u0438\u0446\u0430\u043d\u0438\u0435 \u0442\u0430\u043a\u0436\u0435 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u043e \u0432 \u044f\u0437\u044b\u043a\u0435 Scala, \u043d\u043e \u043a \u0447\u0435\u043c\u0443 \u043c\u044b \u043f\u0440\u0438\u0434\u0451\u043c, \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u0432, \u0447\u0442\u043e \u044d\u0442\u043e \u043d\u0435 \u0442\u0430\u043a?<\/p>\n<p>  \u0412 \u0442\u0430\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u044b \u043c\u043e\u0433\u043b\u0438 \u0431\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438\u0437\u043e\u043c\u043e\u0440\u0444\u0438\u0437\u043c \u041a\u0430\u0440\u0440\u0438-\u0425\u043e\u0432\u0430\u0440\u0434\u0430 \u0438 <a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%97%D0%B0%D0%BA%D0%BE%D0%BD%D1%8B_%D0%B4%D0%B5_%D0%9C%D0%BE%D1%80%D0%B3%D0%B0%D0%BD%D0%B0\">\u0437\u0430\u043a\u043e\u043d\u044b \u0414\u0435 \u041c\u043e\u0440\u0433\u0430\u043d\u0430<\/a>, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0442\u0438\u043f\u043e\u0432 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u0438\u0437 \u0442\u0438\u043f\u043e\u0432 \u043f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u044f \u0438 \u043e\u0442\u0440\u0438\u0446\u0430\u043d\u0438\u044f. \u0412\u043e\u0442 \u043a\u0430\u043a \u044d\u0442\u043e \u043c\u043e\u0433\u043e \u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c\u0441\u044f\u2026<\/p>\n<p>  \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0432\u0441\u043f\u043e\u043c\u043d\u0438\u043c \u0440\u0430\u0432\u0435\u043d\u0441\u0442\u0432\u043e \u0414\u0435 \u041c\u043e\u0440\u0433\u0430\u043d\u0430:  <\/p>\n<pre><code>(A \u2228 B) \u21d4 \u00ac(\u00acA \u2227 \u00acB) <\/code><\/pre>\n<p>  \u0417\u0430\u0442\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c \u0438\u0437\u043e\u043c\u043e\u0440\u0444\u0438\u0437\u043c \u041a\u0430\u0440\u0440\u0438-\u0425\u043e\u0432\u0430\u0440\u0434\u0430 (\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044e \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442\u043d\u043e\u0441\u0442\u0438 <code>=:=<\/code> \u044f\u0437\u044b\u043a\u0430 Scala):  <\/p>\n<pre><code class=\"scala\">(A \u2228 B) =:= \u00ac[\u00ac[A] with \u00ac[B]] <\/code><\/pre>\n<p>  \u0415\u0441\u043b\u0438 \u0431\u044b \u043c\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u043c\u043e\u0433\u043b\u0438 \u043d\u0430\u0439\u0442\u0438 \u0441\u043f\u043e\u0441\u043e\u0431 \u0437\u0430\u043f\u0438\u0441\u0438 \u044d\u0442\u043e\u0433\u043e \u0432 Scala, \u0442\u043e \u043d\u0430\u0448\u0430 \u0446\u0435\u043b\u044c \u0431\u044b\u043b\u0430 \u0431\u044b \u0434\u043e\u0441\u0442\u0438\u0433\u043d\u0443\u0442\u0430 \u0438 \u043c\u044b \u0431\u044b \u0438\u043c\u0435\u043b\u0438 \u043d\u0430\u0448\u0438 \u0442\u0438\u043f\u044b \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f. \u0422\u0430\u043a \u043c\u043e\u0436\u0435\u043c \u043b\u0438 \u043c\u044b \u0432\u044b\u0440\u0430\u0437\u0438\u0442\u044c \u043e\u0442\u0440\u0438\u0446\u0430\u043d\u0435\u043d\u0438\u0435 \u0442\u0438\u043f\u0430 \u0432 Scala?<\/p>\n<p>  \u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u043c\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u043c. \u041d\u043e, \u0447\u0442\u043e \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u0434\u0435\u043b\u0430\u0442\u044c, \u0442\u0430\u043a \u044d\u0442\u043e \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u043d\u0430\u0448\u0438 \u0442\u0438\u043f\u044b \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u043c \u0437\u0430\u043f\u0438\u0441\u044c \u043e\u0442\u0440\u0438\u0446\u0430\u043d\u0438\u044f \u0432 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u043d\u043e\u043c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435. \u0417\u0430\u0442\u0435\u043c \u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u043d\u0430\u0439\u0442\u0438 \u0441\u043f\u043e\u0441\u043e\u0431 \u0437\u0430\u0432\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432\u0441\u0451 \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0432 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u043c \u043d\u0435\u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u043d\u043e\u043c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435.<\/p>\n<p>  \u041d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u0438 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0443\u0434\u0438\u0432\u043b\u0435\u043d\u044b, \u043a\u043e\u0433\u0434\u0430 \u044f \u0440\u0430\u043d\u0435\u0435 \u043f\u0440\u043e\u0438\u043b\u043b\u044e\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043b \u0438\u0437\u043e\u043c\u043e\u0440\u0444\u0438\u0437\u043c \u041a\u0430\u0440\u0440\u0438-\u0425\u043e\u0432\u0430\u0440\u0434\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0442\u0438\u043f\u044b \u043f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u044f \u0432 \u043f\u0430\u0440\u0435 \u0441 \u043a\u043e\u043d\u044a\u044e\u043d\u043a\u0446\u0438\u0435\u0439, \u0442\u0438\u043f\u044b \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u0432 \u043f\u0430\u0440\u0435 \u0441 \u0434\u0438\u0437\u044a\u044e\u043d\u043a\u0446\u0438\u0435\u0439 \u0438 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435 \u043f\u043e\u0434\u0442\u0438\u043f\u043e\u0432 \u0432 \u043f\u0430\u0440\u0435 \u0441 \u0438\u043c\u043f\u043b\u0438\u043a\u0430\u0446\u0438\u0435\u0439. \u041e\u0431\u044b\u0447\u043d\u043e \u0436\u0435 \u0442\u0438\u043f\u044b \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f (product types), \u0442.\u0435. <code>(A, B)<\/code> \u043c\u043e\u0434\u0435\u043b\u0438\u0440\u0443\u044e\u0442 \u043a\u043e\u043d\u044a\u044e\u043d\u043a\u0446\u0438\u044e, \u0442\u0438\u043f\u044b \u0441\u0443\u043c\u043c\u044b (<code>Either[A, B]<\/code>) \u043c\u043e\u0434\u0435\u043b\u0438\u0440\u0443\u044e\u0442 \u0434\u0438\u0437\u044a\u044e\u043d\u043a\u0446\u0438\u044e \u0438 \u0442\u0438\u043f\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u043c\u043e\u0434\u0435\u043b\u0438\u0440\u0443\u044e\u0442 \u0438\u043c\u043f\u043b\u0438\u043a\u0430\u0446\u0438\u044e. \u0415\u0441\u043b\u0438 \u043c\u044b \u043f\u0435\u0440\u0435\u043f\u0438\u0448\u0435\u043c \u043d\u0430\u0448\u0443 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0443\u044e \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0439, \u0441\u0443\u043c\u043c \u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435:  <\/p>\n<table>\n<tr>\n<td>(A, B) =&gt; A<\/td>\n<td>(A \u2227 B) \u21d2 A<\/td>\n<\/tr>\n<tr>\n<td>(A, B) =&gt; B<\/td>\n<td>(A \u2227 B) \u21d2 B<\/td>\n<\/tr>\n<tr>\n<td>A =&gt; Either[A, B]<\/td>\n<td>A \u21d2 (A \u2228 B)<\/td>\n<\/tr>\n<tr>\n<td>B =&gt; Either[A, B]<\/td>\n<td>B \u21d2 (A \u2228 B)<\/td>\n<\/tr>\n<\/table>\n<p>  \u0412 \u043b\u0435\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u043c\u044b \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u043e\u0436\u0438\u0434\u0430\u0435\u043c \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0441\u0442\u0438 \u0441 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f \u043f\u043e\u0434\u0442\u0438\u043f\u043e\u0432, \u0432\u043c\u0435\u0441\u0442\u043e \u044d\u0442\u043e\u0433\u043e \u043d\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u043e\u0431\u043b\u044e\u0434\u0435\u043d\u0438\u0435 <a href=\"https:\/\/en.wikipedia.org\/wiki\/Parametricity\">\u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0430 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0438\u0447\u043d\u043e\u0441\u0442\u0438<\/a>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043d\u0430\u043c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u043c\u043e\u0436\u0435\u0442 \u043b\u0438 \u0442\u0438\u043f \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0431\u044b\u0442\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d \u0438\u0441\u0445\u043e\u0434\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043b\u0438\u0448\u044c \u0438\u0437 \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u0438. \u041e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u0432\u0441\u0435 \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0432 \u043b\u0435\u0432\u043e\u0439 \u043a\u043e\u043b\u043e\u043d\u043a\u0435 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u044b. \u0414\u043b\u044f \u043f\u0435\u0440\u0432\u044b\u0445 \u0434\u0432\u0443\u0445 \u0441\u043b\u0443\u0447\u0430\u0435\u0432 \u043c\u044b \u0438\u043c\u0435\u0435\u043c \u043f\u0430\u0440\u0443 <code>(A, B)<\/code> \u043a\u0430\u043a \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 \u043d\u0430\u0448\u0435\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u044b \u043b\u0435\u0433\u043a\u043e \u043c\u043e\u0436\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0438\u0437 \u044d\u0442\u043e\u0439 \u043f\u0430\u0440\u044b \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0442\u0438\u043f\u0430 <code>A<\/code> \u0438\u043b\u0438 <code>B<\/code>, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0432 <code>_1<\/code> \u0438\u043b\u0438 <code>_2<\/code>:  <\/p>\n<pre><code class=\"scala\">val conj1: ((A, B)) =&gt; A = p =&gt; p._1 val conj2: ((A, B)) =&gt; B = p =&gt; p._2 <\/code><\/pre>\n<p>  \u0412\u043e \u0432\u0442\u043e\u0440\u043e\u043c \u0438 \u0442\u0440\u0435\u0442\u044c\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430\u043c\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0442\u0438\u043f\u0430 <code>A<\/code> \u0438 <code>B<\/code> \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0442\u0438\u043f\u0430 <code>Either[A, B]<\/code> \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0432\u0448\u0438\u0441\u044c \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0430\u043c\u0438 <code>Left[A]<\/code> \u0438 <code>Right[B]<\/code>:  <\/p>\n<pre><code class=\"scala\">val disj1: A =&gt; Either[A, B] = a =&gt; Left(a) val disj2: B =&gt; Either[A, B] = b =&gt; Right(b) <\/code><\/pre>\n<p>  \u0418\u043c\u0435\u043d\u043d\u043e \u0432 \u0442\u0430\u043a\u043e\u0439 \u0444\u043e\u0440\u043c\u0435 \u0438\u0437\u043e\u043c\u043e\u0440\u0444\u0438\u0437\u043c \u041a\u0430\u0440\u0440\u0438-\u0425\u043e\u0432\u0430\u0440\u0434\u0430 \u043e\u0431\u044b\u0447\u043d\u043e \u0432\u044b\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u044f\u0437\u044b\u043a\u043e\u0432 \u0431\u0435\u0437 \u043f\u043e\u0434\u0442\u0438\u043f\u043e\u0432. \u041e\u0434\u043d\u0430\u043a\u043e \u0442\u0438\u043f\u044b \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f, \u0442\u0430\u043a\u0436\u0435 \u043a\u0430\u043a \u0438 \u0442\u0438\u043f\u044b \u043f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u044f, \u043f\u043e \u0441\u0432\u043e\u0435\u0439 \u0441\u0443\u0442\u0438 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u044b \u043d\u0430 \u043f\u043e\u0434\u0442\u0438\u043f\u0430\u0445. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u043d\u043e\u0435 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u043d\u0438 \u0432 \u043a\u043e\u0435\u0439 \u0441\u0442\u0435\u043f\u0435\u043d\u0438 \u043d\u0435 \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u043d\u0430\u043c \u0441 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435\u043c. \u0417\u0430\u0442\u043e \u043e\u043d\u043e \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043c\u043e\u0447\u044c \u043d\u0430\u043c \u0441 \u043e\u0442\u0440\u0438\u0446\u0430\u043d\u0438\u0435\u043c, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0442\u043e\u0439 \u0441\u0430\u043c\u043e\u0439 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u044e\u0449\u0435\u0439 \u0434\u0435\u0442\u0430\u043b\u044c\u044e \u043f\u0430\u0437\u043b\u0430.<\/p>\n<p>  \u0421 \u043f\u043e\u0434\u0442\u0438\u043f\u0430\u043c\u0438 \u0438\u043b\u0438 \u0431\u0435\u0437, \u043d\u0430\u0438\u043c\u0435\u043d\u044c\u0448\u0438\u0439 \u0442\u0438\u043f (bottom type), \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u0432 Scala \u043a\u0430\u043a <code>Nothing<\/code>, \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044f \u0432 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u043b\u043e\u0436\u044c. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432\u0441\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0440\u0430\u0432\u0435\u043d\u0441\u0442\u0432\u0430 \u0441\u043f\u0440\u0430\u0432\u0435\u0434\u043b\u0438\u0432\u044b:  <\/p>\n<table>\n<tr>\n<td>A =&gt; Either[A, Nothing]<\/td>\n<td>A \u21d2 (A \u2228 false)<\/td>\n<\/tr>\n<tr>\n<td>B =&gt; Either[Nothing, B]<\/td>\n<td>B \u21d2 (false \u2228 B)<\/td>\n<\/tr>\n<\/table>\n<p>  \u042d\u0442\u043e \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0438\u0437 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0432\u0441\u0435 \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0441\u043b\u0435\u0432\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c\u044b, \u0430 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0444\u043e\u0440\u043c\u0443\u043b\u044b \u0441\u043f\u0440\u0430\u0432\u0430 \u0432\u0435\u0440\u043d\u044b (<a href=\"http:\/\/james-iry.blogspot.ru\/2011\/05\/why-eager-languages-dont-have-products.html\">\u043f\u043e\u0441\u0442<\/a> \u0414\u0436\u0435\u0439\u043c\u0441\u0430 \u0410\u0439\u0440\u0438 \u043e\u0431\u044a\u044f\u0441\u043d\u044f\u0435\u0442 \u043f\u043e\u0447\u0435\u043c\u0443 \u044f \u043d\u0435 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044e \u0441\u043b\u0443\u0447\u0430\u0439 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0439\/\u043a\u043e\u043d\u044a\u044e\u043d\u043a\u0446\u0438\u0439). \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u0434\u0443\u043c\u0430\u0435\u043c, \u0447\u0442\u043e \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0441\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u043e\u0439:  <\/p>\n<pre><code class=\"scala\">A =&gt; Nothing <\/code><\/pre>\n<p>  \u041d\u0430 \u043f\u0440\u0430\u0432\u043e\u0439 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 \u0438\u0437\u043e\u043c\u043e\u0440\u0444\u0438\u0437\u043c\u0430 \u041a\u0430\u0440\u0440\u0438-\u0425\u043e\u0432\u0430\u0440\u0434\u0430 \u044d\u0442\u0430 \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u0430 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044f \u0432 \u0444\u043e\u0440\u043c\u0443\u043b\u0443 <code>A \u21d2 false<\/code>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442\u043d\u0430 <code>\u00acA<\/code>. \u042d\u0442\u043e \u043a\u0430\u0436\u0435\u0442\u0441\u044f \u0432\u043f\u043e\u043b\u043d\u0435 \u0438\u043d\u0442\u0443\u0438\u0442\u0438\u0432\u043d\u043e \u0440\u0430\u0437\u0443\u043c\u043d\u044b\u043c \u2014 \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0442\u0438\u043f\u0430 <code>Nothing<\/code>, \u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u0430 <code>A =&gt; Nothing<\/code> \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u0430 (\u043a\u0440\u043e\u043c\u0435 \u043a\u0430\u043a \u0432\u044b\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u043d\u0438\u0435\u043c \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f, \u043d\u043e \u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u0442\u043e \u043d\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u0435\u043d\u043e).<\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u0447\u0442\u043e \u0431\u0443\u0434\u0435\u0442, \u0435\u0441\u043b\u0438 \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u044d\u0442\u0443 \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u0443 \u043a\u0430\u043a \u043d\u0430\u0448\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043e\u0442\u0440\u0438\u0446\u0430\u043d\u0438\u044f \u0442\u0438\u043f\u0430,  <\/p>\n<pre><code class=\"scala\">type \u00ac[A] = A =&gt; Nothing <\/code><\/pre>\n<p>  \u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c \u0435\u0433\u043e \u0432 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 \u0437\u0430\u043a\u043e\u043d\u043e\u0432 \u0414\u0435 \u041c\u043e\u0440\u0433\u0430\u043d\u0430, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0442\u0438\u043f \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f:  <\/p>\n<pre><code class=\"scala\">type \u2228[T, U] = \u00ac[\u00ac[T] with \u00ac[U]] <\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u043d\u0430\u0448 \u0442\u0438\u043f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f Scala REPL:  <\/p>\n<pre><code class=\"scala\">scala&gt; type \u00ac[A] = A =&gt; Nothing defined type alias $u00AC  scala&gt; type \u2228[T, U] = \u00ac[\u00ac[T] with \u00ac[U]] defined type alias $u2228  scala&gt; implicitly[Int &lt;:&lt; (Int \u2228 String)] &lt;console&gt;:11: error: Cannot prove that Int &lt;:&lt;    ((Int) =&gt; Nothing with (String) =&gt; Nothing) =&gt; Nothing.        implicitly[Int &lt;:&lt; (Int \u2228 String)] <\/code><\/pre>\n<p>  REPL \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430\u043c, \u0447\u0442\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0435\u0449\u0451 \u043d\u0435 \u0441\u043e\u0432\u0441\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043e. \u0412\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 <code>implicitly[Int &lt;:&lt; (Int \u2228 String)]<\/code> \u0441\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440, \u043c\u043e\u0436\u0435\u0442 \u043b\u0438 \u043e\u043d \u0434\u043e\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e <code>Int<\/code> \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u0434\u0442\u0438\u043f\u043e\u043c <code>Int \u2228  String<\/code>, \u0447\u0442\u043e \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0441\u043f\u0440\u0430\u0432\u0435\u0434\u043b\u0438\u0432\u043e \u0434\u043b\u044f \u0442\u0438\u043f\u0430 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f.<\/p>\n<p>  \u0427\u0442\u043e \u0436\u0435 \u043f\u043e\u0448\u043b\u043e \u043d\u0435 \u0442\u0430\u043a? \u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043c\u044b \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043b\u0438 \u0442\u0438\u043f\u044b \u0432 \u043f\u0440\u0430\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 <code>&lt;:&lt;<\/code> \u0432 \u0442\u0438\u043f\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u0447\u0442\u043e\u0431\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0442\u0440\u0438\u0446\u0430\u043d\u0438\u0435 \u0442\u0438\u043f\u0430, \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u0435 \u043a\u0430\u043a <code>A =&gt; Nothing<\/code>. \u042d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0442\u043e \u0441\u0430\u043c \u0442\u0438\u043f \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0442\u0438\u043f\u043e\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u0438. \u041d\u043e \u044d\u0442\u043e, \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, \u043d\u0435 \u0441\u043e\u0433\u043b\u0430\u0441\u0443\u0435\u0442\u0441\u044f \u0441 \u0442\u0435\u043c, \u0447\u0442\u043e\u0431\u044b <code>Int<\/code> \u0431\u044b\u043b \u043f\u043e\u0434\u0442\u0438\u043f\u043e\u043c \u0442\u0438\u043f\u0430 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f, \u0447\u0442\u043e \u0438 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043e\u0431 \u043e\u0448\u0438\u0431\u043a\u0435 \u043e\u0442 REPL. \u0427\u0442\u043e\u0431\u044b \u0443\u0441\u0442\u0440\u0430\u043d\u0438\u0442\u044c \u043e\u0448\u0438\u0431\u043a\u0443 \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u044c \u043b\u0435\u0432\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 <code>&lt;:&lt;<\/code> \u0432 \u0442\u0438\u043f, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u044b\u043b \u0431\u044b \u043f\u043e\u0434\u0442\u0438\u043f\u043e\u043c \u0442\u0438\u043f\u0430 \u0432 \u043f\u0440\u0430\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438. \u041a\u0430\u043a\u043e\u0439 \u0436\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u044d\u0442\u0430 \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f? \u041a\u0430\u043a \u043d\u0430\u0441\u0447\u0451\u0442 \u0434\u0432\u043e\u0439\u043d\u043e\u0433\u043e \u043e\u0442\u0440\u0438\u0446\u0430\u043d\u0438\u044f?  <\/p>\n<pre><code class=\"scala\">type \u00ac\u00ac[A] = \u00ac[\u00ac[A]] <\/code><\/pre>\n<p>  \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u0447\u0442\u043e \u043d\u0430 \u044d\u0442\u043e \u0441\u043a\u0430\u0436\u0435\u0442 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440:  <\/p>\n<pre><code class=\"scala\">scala&gt; type \u00ac\u00ac[A] = \u00ac[\u00ac[A]] defined type alias $u00AC$u00AC  scala&gt; implicitly[\u00ac\u00ac[Int] &lt;:&lt; (Int \u2228 String)] res5: &lt;:&lt;[((Int) =&gt; Nothing) =&gt; Nothing,   ((Int) =&gt; Nothing with (String) =&gt; Nothing) =&gt; Nothing] =     &lt;function1&gt;  scala&gt; implicitly[\u00ac\u00ac[String] &lt;:&lt; (Int \u2228 String)] res6: &lt;:&lt;[((String) =&gt; Nothing) =&gt; Nothing,   ((Int) =&gt; Nothing with (String) =&gt; Nothing) =&gt; Nothing] =     &lt;function1&gt; <\/code><\/pre>\n<p>  \u0411\u0438\u043d\u0433\u043e! \u0418 <code>\u00ac\u00ac[Int]<\/code>, \u0438 <code>\u00ac\u00ac[String]<\/code> \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043f\u043e\u0434\u0442\u0438\u043f\u0430\u043c\u0438 <code>Int \u2228 String<\/code>!<\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0430\u0434\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u0447\u0442\u043e \u043c\u044b \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043e\u0442\u0432\u0435\u0442:  <\/p>\n<pre><code class=\"scala\">scala&gt; implicitly[\u00ac\u00ac[Double] &lt;:&lt; (Int \u2228 String)] &lt;console&gt;:12: error: Cannot prove that   ((Double) =&gt; Nothing) =&gt; Nothing &lt;:&lt;     ((Int) =&gt; Nothing with (String) =&gt; Nothing) =&gt; Nothing. <\/code><\/pre>\n<p>  \u0418\u0442\u0430\u043a, \u043c\u044b \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u043b\u0438, \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u043d\u0430\u043d\u0435\u0441\u0442\u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u0448\u0442\u0440\u0438\u0445\u0438. \u041e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f \u043f\u043e\u0434\u0442\u0438\u043f\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u044b \u0438\u043c\u0435\u0435\u043c, \u0438\u0437\u043e\u043c\u043e\u0440\u0444\u043d\u044b \u0442\u0435\u043c, \u043a\u0430\u043a\u0438\u0435 \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c (\u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0442\u0438\u043f <code>\u00ac\u00ac[T]<\/code> \u0438\u0437\u043e\u043c\u043e\u0440\u0444\u0435\u043d <code>T<\/code>). \u041d\u043e \u0443 \u043d\u0430\u0441 \u043f\u043e\u043a\u0430 \u0447\u0442\u043e \u043d\u0435\u0442 \u0441\u043f\u043e\u0441\u043e\u0431\u0430 \u0432\u044b\u0440\u0430\u0437\u0438\u0442\u044c \u0442\u0435 \u0436\u0435 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f \u0441 \u043d\u0435\u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438 \u0442\u0438\u043f\u0430\u043c\u0438, \u0447\u0442\u043e \u043d\u0430\u043c \u043a\u0430\u043a \u0440\u0430\u0437 \u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e.<\/p>\n<p>  \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u0440\u0435\u0448\u0438\u0442\u044c \u044d\u0442\u0443 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u0441\u0447\u0438\u0442\u0430\u044f <code>\u00ac[T]<\/code>, <code>\u00ac\u00ac[T]<\/code> \u0438 <code>T \u2228 U<\/code> \u0444\u0430\u043d\u0442\u043e\u043c\u043d\u044b\u043c\u0438 \u0442\u0438\u043f\u0430\u043c\u0438 \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0438\u0445 \u0442\u043e\u043b\u044c\u043a\u043e, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0442\u0440\u0435\u0431\u0443\u0435\u043c\u044b\u0435 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f \u043f\u043e\u0434\u0442\u0438\u043f\u043e\u0432, \u0430 \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u044f \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0441\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432. \u0412\u043e\u0442 \u043a\u0430\u043a \u044d\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043d\u0430 \u043d\u0430\u0448\u0435\u043c \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435:  <\/p>\n<pre><code class=\"scala\">def size[T](t: T)(implicit ev: (\u00ac\u00ac[T] &lt;:&lt; (Int \u2228 String))) =   t match {     case i: Int =&gt; i     case s: String =&gt; s.length   } <\/code><\/pre>\n<p>  \u0417\u0434\u0435\u0441\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043e\u0431\u043e\u0431\u0449\u0451\u043d\u043d\u043e\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u0442\u0438\u043f\u0430, \u0442\u0440\u0435\u0431\u0443\u044e\u0449\u0435\u0435, \u0447\u0442\u043e\u0431\u044b \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u043c\u043e\u0433 \u0434\u043e\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e \u043b\u044e\u0431\u043e\u0439 <code>T<\/code>, \u0432\u044b\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u0439 \u043a\u0430\u043a \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 \u0442\u0438\u043f\u0430 \u0434\u043b\u044f \u043c\u0435\u0442\u043e\u0434\u0430 <code>size<\/code>, \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u044f\u0435\u0442 \u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u0435\u0433\u043e \u0434\u0432\u043e\u0439\u043d\u043e\u0435 \u043e\u0442\u0440\u0438\u0446\u0430\u043d\u0438\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u0434\u0442\u0438\u043f\u043e\u043c <code>Int \u2228 String<\/code>. \u041a\u0430\u043a \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u0441\u0435\u0441\u0441\u0438\u044f REPL \u0434\u0430\u043d\u043d\u043e\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e, \u0435\u0441\u043b\u0438 <code>T<\/code> \u2014 \u044d\u0442\u043e <code>Int<\/code> \u0438\u043b\u0438 <code>String<\/code>:  <\/p>\n<pre><code class=\"scala\">scala&gt; def size[T](t: T)(implicit ev: (\u00ac\u00ac[T] &lt;:&lt; (Int \u2228 String))) =      |   t match {      |     case i: Int =&gt; i      |     case s: String =&gt; s.length      |   } size: [T](t: T)(implicit ev: &lt;:&lt;[((T) =&gt; Nothing) =&gt; Nothing,   ((Int) =&gt; Nothing with (String) =&gt; Nothing) =&gt; Nothing])Int  scala&gt; size(23) res8: Int = 23  scala&gt; size(&quot;foo&quot;) res9: Int = 3  scala&gt; size(1.0) &lt;console&gt;:13: error: Cannot prove that   ((Double) =&gt; Nothing) =&gt; Nothing &lt;:&lt;     ((Int) =&gt; Nothing with (String) =&gt; Nothing) =&gt; Nothing. <\/code><\/pre>\n<p>  \u0410 \u0442\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044f\u044f \u0445\u0438\u0442\u0440\u043e\u0441\u0442\u044c. \u0421 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441\u0430 \u043d\u0435\u044f\u0432\u043d\u044b\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0434\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u0430 \u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0441\u044f \u0443\u0440\u043e\u0434\u043b\u0438\u0432\u043e \u0438 \u0442\u044f\u0436\u0435\u043b\u043e\u0432\u0435\u0441\u043d\u043e, \u043e\u0434\u043d\u0430\u043a\u043e \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u044d\u0442\u043e \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0432 \u0435\u0433\u043e \u0432 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043d\u043e\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u0442\u0438\u043f\u0430 <code>T<\/code>:  <\/p>\n<pre><code class=\"scala\">type |\u2228|[T, U] = { type \u03bb[X] = \u00ac\u00ac[X] &lt;:&lt; (T \u2228 U) }  def size[T: (Int |\u2228| String)#\u03bb](t: T) =   t match {     case i: Int =&gt; i     case s: String =&gt; s.length   } <\/code><\/pre>\n<p>  \u0413\u043e\u0442\u043e\u0432\u043e! \u041c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u043d\u0435\u0437\u0430\u043f\u0430\u043a\u043e\u0432\u0430\u043d\u043d\u043e\u0435, \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0442\u0438\u043f\u043e\u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0442\u0438\u043f\u043e\u0432 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u0432 Scala, \u0431\u0435\u0437 \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u0441\u0430\u043c\u043e\u0433\u043e \u044f\u0437\u044b\u043a\u0430!<\/p>\n<p>  \u0415\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u043b\u0443\u0447\u0448\u0435, \u0435\u0441\u043b\u0438 \u0431\u044b Scala \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u043b\u0430 \u0442\u0438\u043f\u044b \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u043a\u0430\u043a \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u044b. \u041d\u043e \u043f\u043e \u043a\u0440\u0430\u0439\u043d\u0435\u0439 \u043c\u0435\u0440\u0435 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u0435 \u043d\u0430\u043c\u0438 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u0442, \u0447\u0442\u043e \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 Scala \u0438\u043c\u0435\u0435\u0442 \u0432\u0441\u044e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e, \u0447\u0442\u043e\u0431\u044b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e. \u0422\u0435\u043f\u0435\u0440\u044c \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043e\u043d\u0438\u043c\u0430\u0442\u044c \u041c\u0430\u0440\u0442\u0438\u043d\u0430 \u0438 \u0410\u0434\u0440\u0438\u0430\u0430\u043d\u0430, \u0447\u0442\u043e\u0431\u044b \u043e\u043d\u0438 \u0441\u0434\u0435\u043b\u0430\u043b\u0438 \u0442\u0438\u043f\u044b \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u043c\u0438 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e.       <\/p>\n<div class=\"clear\"><\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"http:\/\/habrahabr.ru\/post\/269907\/\"> http:\/\/habrahabr.ru\/post\/269907\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>       <i>\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435 \u043f\u0435\u0440\u0432\u043e\u0434\u0447\u0438\u043a\u0430. \u0412 \u0431\u0443\u0434\u0443\u0449\u0435\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 Scala \u0430\u043d\u043e\u043d\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u0430 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0442\u0438\u043f\u043e\u0432 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f (union types). Miles Sabin, \u0448\u0438\u0440\u043e\u043a\u043e\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0439 \u0432 \u0443\u0437\u043a\u0438\u0445 \u043a\u0440\u0443\u0433\u0430\u0445 \u043a\u0430\u043a \u0441\u043e\u0437\u0434\u0430\u0442\u0435\u043b\u044c Shapeless, \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u0442 \u0432 <a href=\"http:\/\/milessabin.com\/blog\/2011\/06\/09\/scala-union-types-curry-howard\/\">\u044d\u0442\u043e\u0439<\/a> \u0441\u0442\u0430\u0442\u044c\u0435 2011 \u0433\u043e\u0434\u0430, \u043a\u0430\u043a \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0442\u0438\u043f\u044b \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u0443\u0436\u0435 \u0441\u0435\u0439\u0447\u0430\u0441.<\/i><\/p>\n<p>  Scala \u0438\u043c\u0435\u0435\u0442 \u043e\u0447\u0435\u043d\u044c \u0432\u044b\u0440\u0430\u0437\u0438\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0442\u0438\u043f\u043e\u0432. \u041e\u0434\u043d\u0430\u043a\u043e \u043e\u043d\u0430 \u043d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 (\u043f\u043e \u043a\u0440\u0430\u0439\u043d\u0435\u0439 \u043c\u0435\u0440\u0435 \u043a\u0430\u043a \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u044b) \u0432\u0441\u0435\u0445 \u0432\u043e\u0436\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432. \u0415\u0441\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0438\u0441\u0442\u0438\u043d\u0435 \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432, \u043f\u043e\u0434\u043f\u0430\u0434\u0430\u044e\u0449\u0438\u0445 \u043f\u043e\u0434 \u044d\u0442\u0443 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u044e \u2014 \u044d\u0442\u043e \u0442\u0438\u043f\u044b \u043f\u043e\u043b\u0438\u043c\u043e\u0440\u0444\u043d\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0432\u044b\u0441\u0448\u0435\u0433\u043e \u0440\u0430\u043d\u0433\u0430 (higher-rank) \u0438 \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u044b\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043d\u044b\u0435 \u0442\u0438\u043f\u044b. \u041d\u043e \u043e \u043d\u0438\u0445 \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u043f\u043e\u0441\u0442\u0430\u0445, \u0430 \u0441\u0435\u0433\u043e\u0434\u043d\u044f \u044f \u0441\u043e\u0431\u0438\u0440\u0430\u044e\u0441\u044c \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0432\u0430\u043c, \u043a\u0430\u043a \u0432 Scala \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0442\u0438\u043f\u044b \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f (union types). \u0412 \u0445\u043e\u0434\u0435 \u043e\u0431\u044a\u044f\u0441\u043d\u0435\u043d\u0438\u044f \u044f \u043f\u0440\u043e\u043b\u044c\u044e \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0441\u0432\u0435\u0442\u0430 \u043d\u0430 \u0438\u0437\u043e\u043c\u043e\u0440\u0444\u0438\u0437\u043c \u041a\u0430\u0440\u0440\u0438-\u0425\u043e\u0432\u0430\u0440\u0434\u0430 \u0438 \u043f\u043e\u043a\u0430\u0436\u0443, \u043a\u0430\u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0432 \u043d\u0430\u0448\u0438\u0445 \u0446\u0435\u043b\u044f\u0445.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/427\/70e\/d92\/42770ed92098475fac9f4632be73e3d5.jpg\" \/><\/div>\n<p>  <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-267232","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/267232","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=267232"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/267232\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=267232"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=267232"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=267232"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}