{"id":222015,"date":"2014-05-06T19:57:03","date_gmt":"2014-05-06T15:57:03","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=222015"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=222015","title":{"rendered":"<span class=\"post_title\">\u0414\u0438\u0437\u0430\u0439\u043d \u0438 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 \u0432 \u0424\u041f. \u0427\u0430\u0441\u0442\u044c 3<\/span>"},"content":{"rendered":"<div class=\"content html_format\">   \t<strong>\u0421\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0438 \u0437\u0430\u043a\u043e\u043d\u044b. \u0421\u0446\u0435\u043d\u0430\u0440\u0438\u0438. Inversion of Control \u0432 Haskell.<\/strong><\/p>\n<h5>\u0421\u043e\u0432\u0441\u0435\u043c \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0442\u0435\u043e\u0440\u0438\u0438<\/h5>\n<p>  \u0412 <a href=\"http:\/\/habrahabr.ru\/post\/215161\/\">\u043f\u0440\u043e\u0448\u043b\u043e\u0439<\/a> \u0447\u0430\u0441\u0442\u0438 \u043c\u044b \u0443\u0431\u0435\u0434\u0438\u043b\u0438\u0441\u044c, \u0447\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u043b\u0435\u0433\u043a\u043e \u0437\u0430\u043f\u0443\u0442\u0430\u0442\u044c\u0441\u044f \u0432 \u043f\u043b\u043e\u0445\u043e \u0441\u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u043c \u043a\u043e\u0434\u0435. \u041a \u0441\u0447\u0430\u0441\u0442\u044c\u044e, \u0441 \u0434\u0440\u0435\u0432\u043d\u0438\u0445 \u0432\u0440\u0435\u043c\u0435\u043d \u043d\u0430\u043c \u0438\u0437\u0432\u0435\u0441\u0442\u0435\u043d \u043f\u0440\u0438\u043d\u0446\u0438\u043f \u201c\u0440\u0430\u0437\u0434\u0435\u043b\u044f\u0439 \u0438 \u0432\u043b\u0430\u0441\u0442\u0432\u0443\u0439\u201d, \u2014 \u043e\u043d \u0448\u0438\u0440\u043e\u043a\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0438 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b \u0438 \u0434\u0438\u0437\u0430\u0439\u043d\u0430 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0441\u0438\u0441\u0442\u0435\u043c. \u041c\u044b \u0437\u043d\u0430\u0435\u043c \u0440\u0430\u0437\u043d\u044b\u0435 \u0432\u043e\u043f\u043b\u043e\u0449\u0435\u043d\u0438\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0430, \u043a\u0430\u043a-\u0442\u043e: \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043d\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b, \u0443\u043c\u0435\u043d\u044c\u0448\u0435\u043d\u0438\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043c\u0435\u0436\u0434\u0443 \u043c\u043e\u0434\u0443\u043b\u044f\u043c\u0438, \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u044b \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f, \u0430\u0431\u0441\u0442\u0440\u0430\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043e\u0442 \u0434\u0435\u0442\u0430\u043b\u0435\u0439, \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u044f\u0437\u044b\u043a\u043e\u0432. \u042d\u0442\u043e \u0445\u043e\u0440\u043e\u0448\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0434\u043b\u044f \u0438\u043c\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u0445 \u044f\u0437\u044b\u043a\u043e\u0432, \u0438 \u043d\u0430\u0434\u043e \u043f\u043e\u043b\u0430\u0433\u0430\u0442\u044c, \u0447\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0445, \u0437\u0430 \u0442\u0435\u043c \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c, \u0447\u0442\u043e \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0431\u0443\u0434\u0443\u0442 \u0434\u0440\u0443\u0433\u0438\u043c\u0438. \u041a\u0430\u043a\u0438\u043c\u0438 \u0436\u0435?<br \/>  <a name=\"habracut\"><\/a><br \/>  \u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043f\u0440\u0438\u043d\u0446\u0438\u043f Inversion of Control (\u0434\u0435\u0442\u0430\u043b\u044c\u043d\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0430 \u043c\u043e\u0436\u043d\u043e \u043b\u0435\u0433\u043a\u043e \u043d\u0430\u0439\u0442\u0438 \u0432 \u0441\u0435\u0442\u0438, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <a href=\"http:\/\/habrahabr.ru\/post\/116232\/\">\u0437\u0434\u0435\u0441\u044c<\/a> \u0438 <a href=\"http:\/\/stackoverflow.com\/questions\/3058\/what-is-inversion-of-control\">\u0437\u0434\u0435\u0441\u044c<\/a>). \u041e\u043d \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u0442\u044c \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u043e\u0441\u0442\u044c \u043c\u0435\u0436\u0434\u0443 \u0447\u0430\u0441\u0442\u044f\u043c\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u043f\u0443\u0442\u0435\u043c \u0438\u043d\u0432\u0435\u0440\u0441\u0438\u0438 \u043f\u043e\u0442\u043e\u043a\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f. \u0411\u0443\u043a\u0432\u0430\u043b\u044c\u043d\u043e \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u043c\u044b \u0432\u043d\u0435\u0434\u0440\u044f\u0435\u043c \u0432 \u0438\u043d\u043e\u0435 \u043c\u0435\u0441\u0442\u043e \u0441\u0432\u043e\u0439 \u043a\u043e\u0434, \u0447\u0442\u043e\u0431\u044b \u0442\u0430\u043c \u0435\u0433\u043e \u043a\u043e\u0433\u0434\u0430-\u043d\u0438\u0431\u0443\u0434\u044c \u0432\u044b\u0437\u0432\u0430\u043b\u0438; \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0432\u043d\u0435\u0434\u0440\u0435\u043d\u043d\u044b\u0439 \u043a\u043e\u0434 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u0447\u0435\u0440\u043d\u044b\u0439 \u044f\u0449\u0438\u043a \u0441 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0442\u043d\u044b\u043c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u043c. \u041f\u043e\u043a\u0430\u0436\u0435\u043c, \u0447\u0442\u043e \u0432 \u043b\u044e\u0431\u043e\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u043c \u043a\u043e\u0434\u0435 \u0441\u043e\u0447\u0435\u0442\u0430\u044e\u0442\u0441\u044f \u043e\u0431\u0430 \u043f\u0440\u0438\u0437\u043d\u0430\u043a\u0430 IoC \u2014 \u201c\u0432\u043d\u0435\u0434\u0440\u0435\u043d\u0438\u0435 \u043a\u043e\u0434\u0430\u201d \u0438 \u201c\u0447\u0435\u0440\u043d\u044b\u0439 \u044f\u0449\u0438\u043a\u201d, \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043f\u0440\u0438\u043c\u0435\u0440:<\/p>\n<blockquote><p>progression&nbsp;op&nbsp;<font color=\"#339933\">=<\/font>&nbsp;<font>iterate<\/font>&nbsp;<font>(<\/font>`op`&nbsp;<font>2<\/font><font>)<\/font>&nbsp;<font>1<\/font><br \/>  &nbsp;<br \/>  geometricProgression<font color=\"#339933\">,<\/font>&nbsp;arithmeticalProgression&nbsp;<font color=\"#339933\">::<\/font>&nbsp;<font color=\"#cccc00\">Integer<\/font>&nbsp;<font color=\"#339933\">-&gt;<\/font>&nbsp;<font>[<\/font><font color=\"#cccc00\">Integer<\/font><font>]<\/font><br \/>  geometricProgression&nbsp;<font color=\"#339933\">=<\/font>&nbsp;progression&nbsp;<font>(<\/font><font color=\"#339933\">*<\/font><font>)<\/font><br \/>  arithmeticalProgression&nbsp;<font color=\"#339933\">=<\/font>&nbsp;progression&nbsp;<font>(<\/font><font color=\"#339933\">+<\/font><font>)<\/font><br \/>  &nbsp;<br \/>  geometricals<font color=\"#339933\">,<\/font>&nbsp;arithmeticals&nbsp;<font color=\"#339933\">::<\/font>&nbsp;<font>[<\/font><font color=\"#cccc00\">Integer<\/font><font>]<\/font><br \/>  geometricals&nbsp;<font color=\"#339933\">=<\/font>&nbsp;take10&nbsp;<font color=\"#339933\">$<\/font>&nbsp;geometricProgression&nbsp;<font>1<\/font><br \/>  arithmeticals&nbsp;<font color=\"#339933\">=<\/font>&nbsp;take10&nbsp;<font color=\"#339933\">$<\/font>&nbsp;arithmeticalProgression&nbsp;<font>1<\/font><\/p><\/blockquote>\n<p>  \u0417\u0434\u0435\u0441\u044c \u043d\u0430 \u0432\u0445\u043e\u0434 \u043e\u0434\u043d\u0438\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c (iterate, progression) \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0442\u0441\u044f \u0434\u0440\u0443\u0433\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 ((*), (+), `op` 2), \u0442\u043e \u0435\u0441\u0442\u044c, \u0432\u043d\u0435\u0434\u0440\u044f\u0435\u0442\u0441\u044f \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043a\u043e\u0434. \u0418 \u0432\u043d\u0443\u0442\u0440\u0438 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044e\u0449\u0438\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u044d\u0442\u043e\u0442 \u043a\u043e\u0434 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u0447\u0435\u0440\u043d\u044b\u0439 \u044f\u0449\u0438\u043a, \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0438\u0437\u0432\u0435\u0441\u0442\u0435\u043d \u043b\u0438\u0448\u044c \u0442\u0438\u043f. \u0412 \u0441\u043b\u0443\u0447\u0430\u0435 iterate, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432\u0442\u043e\u0440\u043e\u0439 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0442\u0438\u043f\u0430 Integer -&gt; Integer, \u0438 \u043d\u0435\u0432\u0430\u0436\u043d\u043e, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u043b\u043e\u0436\u043d\u044b\u043c \u0431\u0443\u0434\u0435\u0442 \u0435\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0438\u043d\u0432\u0435\u0440\u0441\u0438\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043b\u0435\u0436\u0438\u0442 \u0432 \u043e\u0441\u043d\u043e\u0432\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f; \u0432 \u0442\u0435\u043e\u0440\u0438\u0438, \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0432\u044b\u0441\u0448\u0438\u0445 \u043f\u043e\u0440\u044f\u0434\u043a\u043e\u0432 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0441\u043a\u043e\u043b\u044c \u0443\u0433\u043e\u0434\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435. \u0415\u0441\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u043d\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430: \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0435 \u0442\u043e\u043b\u043a\u043e\u0432\u0430\u043d\u0438\u0435 IoC \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043d\u0430\u0438\u0432\u043d\u043e\u0435, \u0438 \u044d\u0442\u043e \u0432\u0435\u0434\u0435\u0442, \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435, \u043a \u043d\u0430\u0438\u0432\u043d\u043e\u043c\u0443 \u043a\u043e\u0434\u0443. \u0423\u0436\u0435 \u0432 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043d\u043e\u043c \u0432\u044b\u0448\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u043a\u043e\u0434 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u043c\u043e\u043d\u043e\u043b\u0438\u0442\u043d\u0443\u044e \u043f\u0438\u0440\u0430\u043c\u0438\u0434\u0443, \u0430 \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u043e\u043d\u0430 \u0431\u044b \u0440\u0430\u0437\u0440\u043e\u0441\u043b\u0430\u0441\u044c \u0434\u043e \u0433\u0438\u0433\u0430\u043d\u0442\u0441\u043a\u0438\u0445 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u0432 \u0438 \u0441\u0442\u0430\u043b\u0430 \u0431\u044b \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u043d\u0435\u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u043e\u0439.<\/p>\n<p>  \u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 IoC \u0441 \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b, \u2014 \u0442\u043e \u0435\u0441\u0442\u044c, \u0441\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u201c\u0433\u043e\u0441\u0442\u0435\u043f\u0440\u0438\u0438\u043c\u043d\u043e\u0433\u043e\u201d \u043a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u043e\u0433\u043e \u043a\u043e\u0434\u0430. \u0412 \u043d\u0435\u043c \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u0432\u043d\u0435\u0448\u043d\u0438\u0439 \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442, \u0441\u043b\u0443\u0436\u0430\u0449\u0438\u0439 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0439 \u0446\u0435\u043b\u0438. \u0421\u043d\u0430\u0440\u0443\u0436\u0438 \u0434\u0430\u043d\u043d\u044b\u0439 \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u043e\u0434\u043c\u0435\u043d\u0435\u043d \u0434\u0440\u0443\u0433\u0438\u043c, \u043d\u043e \u0434\u043b\u044f \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044e\u0449\u0435\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u043f\u043e\u0434\u043c\u0435\u043d\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u043d\u0435\u0437\u0430\u043c\u0435\u0442\u043d\u043e\u0439. \u042d\u0442\u043e \u0442\u0430\u043a \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0439 \u043f\u0440\u0438\u043d\u0446\u0438\u043f \u043f\u043e\u0434\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 <a href=\"http:\/\/ru.wikipedia.org\/wiki\/%D0%9F%D1%80%D0%B8%D0%BD%D1%86%D0%B8%D0%BF_%D0%BF%D0%BE%D0%B4%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B8_%D0%91%D0%B0%D1%80%D0%B1%D0%B0%D1%80%D1%8B_%D0%9B%D0%B8%D1%81%D0%BA%D0%BE%D0%B2\">\u041b\u0438\u0441\u043a\u043e\u0432<\/a>. \u041e\u043d \u0441\u043b\u0443\u0436\u0438\u0442 \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u043c \u0432 \u041e\u041e\u041f-\u043c\u0438\u0440\u0435 \u0438 \u043f\u0440\u0435\u0434\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442, \u0447\u0442\u043e\u0431\u044b \u0443 \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u043e\u0432 \u0431\u044b\u043b\u043e \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0443\u0435\u043c\u043e\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435. \u201c\u041f\u0440\u0435\u0434\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u201d, \u0430 \u043d\u0435 \u201c\u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u0443\u0435\u0442\u201d, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0432 \u041e\u041e\u041f-\u044f\u0437\u044b\u043a\u0430\u0445 \u0442\u0430\u043a\u043e\u0439 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0438 \u0434\u0430\u0442\u044c \u043d\u0435\u043b\u044c\u0437\u044f, \u2014 \u0432 \u043b\u044e\u0431\u043e\u043c \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u0435 \u043c\u043e\u0436\u0435\u0442 \u0432\u043d\u0435\u0437\u0430\u043f\u043d\u043e \u043f\u043e\u044f\u0432\u0438\u0442\u044c\u0441\u044f \u043b\u044e\u0431\u043e\u0439 \u043f\u043e\u0431\u043e\u0447\u043d\u044b\u0439 \u044d\u0444\u0444\u0435\u043a\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438 \u043d\u0430\u0440\u0443\u0448\u0438\u0442 \u043f\u0440\u0438\u043d\u0446\u0438\u043f. \u041f\u0440\u0438\u043c\u0435\u043d\u0438\u043c \u043b\u0438 \u044d\u0442\u043e\u0442 \u043f\u0440\u0438\u043d\u0446\u0438\u043f \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0445 \u044f\u0437\u044b\u043a\u0430\u0445? \u0414\u0430, \u043a\u043e\u043d\u0435\u0447\u043d\u043e. \u0411\u043e\u043b\u0435\u0435 \u0442\u043e\u0433\u043e, \u043f\u0440\u0438 \u0443\u0441\u043b\u043e\u0432\u0438\u0438, \u0447\u0442\u043e \u043a\u043e\u0434 \u0447\u0438\u0441\u0442\u044b\u0439, \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0431\u043e\u043b\u0435\u0435 \u0441\u0438\u043b\u044c\u043d\u044b\u0435 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0438, \u2014 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0435\u0441\u043b\u0438 \u044f\u0437\u044b\u043a \u0441\u043e \u0441\u0442\u0440\u043e\u0433\u043e\u0439 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0442\u0438\u043f\u0438\u0437\u0430\u0446\u0438\u0435\u0439.<\/p>\n<p>  \u0412 \u043a\u043e\u043d\u0446\u0435 \u0441\u0442\u0430\u0442\u044c\u0438 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043a\u0440\u0430\u0442\u043a\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0440\u0430\u0437\u043d\u044b\u0445 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0439 Inversion of Control \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 Haskell. \u041d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0448\u0430\u0431\u043b\u043e\u043d\u044b \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u043e\u043b\u043d\u044b\u043c\u0438 \u0430\u043d\u0430\u043b\u043e\u0433\u0430\u043c\u0438 \u0442\u0430\u043a\u043e\u0432\u044b\u0445 \u0432 \u0438\u043c\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u043c \u043c\u0438\u0440\u0435 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043c\u043e\u043d\u0430\u0434\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0438\u043d\u044a\u0435\u043a\u0446\u0438\u044f \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0435\u0441\u0442\u044c Dependency Injection), \u0430 \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u043b\u0438\u0448\u044c \u0432 \u043d\u0435\u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0441\u0442\u0435\u043f\u0435\u043d\u0438 \u043d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u044e\u0442 IoC. \u041d\u043e \u0432\u0441\u0435 \u043e\u043d\u0438 \u0432 \u0440\u0430\u0432\u043d\u043e\u0439 \u0441\u0442\u0435\u043f\u0435\u043d\u0438 \u043f\u043e\u043b\u0435\u0437\u043d\u044b \u0434\u043b\u044f \u0445\u043e\u0440\u043e\u0448\u0435\u0433\u043e \u0434\u0438\u0437\u0430\u0439\u043d\u0430.<\/p>\n<h5>\u041c\u043d\u043e\u0433\u043e \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0438<\/h5>\n<p>  \u041d\u0430\u0441\u0442\u0430\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u0438\u0441\u0430\u0442\u044c \u0445\u043e\u0440\u043e\u0448\u0438\u0439 \u043a\u043e\u0434. \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043c\u044b \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u043c \u0438\u0437\u0443\u0447\u0430\u0442\u044c \u0434\u0438\u0437\u0430\u0439\u043d \u0438\u0433\u0440\u044b \u201cThe Amoeba World\u201d, \u2014 \u0446\u0435\u043b\u0443\u044e \u0435\u0433\u043e \u044d\u043f\u043e\u0445\u0443, \u043e\u0447\u0435\u0440\u0447\u0435\u043d\u043d\u0443\u044e <a href=\"https:\/\/github.com\/graninas\/The-Amoeba-World\/commit\/b08667a0fcf349ad56d33790f5a5ecde7ab52719\">\u044d\u0442\u0438\u043c<\/a> \u0438 <a href=\"https:\/\/github.com\/graninas\/The-Amoeba-World\/commit\/af5e9d4512d2ff907d983358cf8e000840f5a624\">\u044d\u0442\u0438\u043c<\/a> \u043a\u043e\u043c\u043c\u0438\u0442\u0430\u043c\u0438. \u042d\u043f\u043e\u0445\u0430 \u0431\u044b\u043b\u0430 \u043d\u0430\u0441\u044b\u0449\u0435\u043d\u043d\u0430\u044f. \u041a\u0440\u043e\u043c\u0435 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u0439 \u0438\u0433\u0440\u043e\u0432\u043e\u0439 \u043b\u043e\u0433\u0438\u043a\u0438, \u0431\u044b\u043b\u0438 \u0438\u0441\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043d\u044b \u0442\u0430\u043a\u0438\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u043a\u0430\u043a <a href=\"http:\/\/habrahabr.ru\/post\/190442\/\">\u043b\u0438\u043d\u0437\u044b<\/a>, \u0432\u0432\u0435\u0434\u0435\u043d\u043e \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <a href=\"http:\/\/www.haskell.org\/haskellwiki\/Introduction_to_QuickCheck2\">QuickCheck<\/a>, \u043f\u0440\u0438\u0434\u0443\u043c\u0430\u043d \u044f\u0437\u044b\u043a \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0435\u0432, \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u0435\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440, \u0438\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u043e\u0432\u0430\u043d A* \u2014 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043f\u043e\u0438\u0441\u043a\u0430 \u043f\u043e \u0433\u0440\u0430\u0444\u0443 \u043c\u0438\u0440\u0430, \u0438 \u043d\u0430\u0439\u0434\u0435\u043d \u0435\u0449\u0435 \u043e\u0434\u0438\u043d \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u043d\u0442\u0438\u043f\u0430\u0442\u0442\u0435\u0440\u043d, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438 \u043f\u043e\u043b\u043e\u0436\u0438\u043b \u043a\u043e\u043d\u0435\u0446 \u044d\u0442\u043e\u0439 \u044d\u043f\u043e\u0445\u0435. \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043d\u0430\u0448 \u0440\u0430\u0437\u0433\u043e\u0432\u043e\u0440 \u043a\u043e\u0441\u043d\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0432\u043e\u0439\u0441\u0442\u0432 \u0438 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0435\u0432, \u0432\u0441\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0435 \u043e\u0441\u0442\u0430\u0432\u0438\u043c \u0434\u043b\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0447\u0430\u0441\u0442\u0435\u0439.<\/p>\n<p>  <strong>\u0421\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u044b<\/strong><\/p>\n<p>  \u0418\u0437 \u043f\u0440\u043e\u0448\u043b\u043e\u0433\u043e \u043e\u043f\u044b\u0442\u0430 \u0441\u0442\u0430\u043b\u043e \u044f\u0441\u043d\u043e, \u0447\u0435\u043c \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435, \u0438\u0437 \u0447\u0435\u0433\u043e \u043e\u043d\u0438 \u0441\u043e\u0441\u0442\u043e\u044f\u0442. \u0413\u043b\u0430\u0432\u043d\u0430\u044f \u0438\u0434\u0435\u044f, \u0437\u0430\u043b\u043e\u0436\u0435\u043d\u043d\u0430\u044f \u0432 \u044d\u0442\u043e\u0442 \u0434\u0438\u0437\u0430\u0439\u043d, \u0442\u0430\u043a\u043e\u0432\u0430: \u043e\u0431\u044a\u0435\u043a\u0442 \u2014 \u044d\u0442\u043e \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044c, \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u0430\u044f \u0438\u0437 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u0432\u043e\u0439\u0441\u0442\u0432. \u041e\u0431\u044a\u0435\u043a\u0442\u044b \u201cKaryon\u201d, \u201cPlasma\u201d, \u201cBorder\u201d \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u0431\u044b\u043b\u0438 \u0440\u0430\u0441\u0447\u043b\u0435\u043d\u0435\u043d\u044b, \u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d \u0442\u0430\u043a\u043e\u0439 \u043d\u0430\u0431\u043e\u0440 \u0441\u0432\u043e\u0439\u0441\u0442\u0432:<\/p>\n<ul>\n<li>\u0423\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440<\/li>\n<li>\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435<\/li>\n<li>\u041f\u0440\u043e\u0447\u043d\u043e\u0441\u0442\u044c (\u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c \u0438 \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e HP)<\/li>\n<li>\u0412\u043b\u0430\u0434\u0435\u043b\u0435\u0446 (\u0438\u0433\u0440\u043e\u043a)<\/li>\n<li>\u0421\u043b\u043e\u0439 (\u043f\u043e\u0434\u0437\u0435\u043c\u0435\u043b\u044c\u0435, \u0437\u0435\u043c\u043b\u044f, \u043d\u0435\u0431\u043e)<\/li>\n<li>\u0420\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 (\u043d\u0430 \u043a\u0430\u0440\u0442\u0435)<\/li>\n<li>\u0412\u043e\u0437\u0440\u0430\u0441\u0442 (\u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c \u0438 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u0432\u043e\u0437\u0440\u0430\u0441\u0442)<\/li>\n<li>\u0411\u0430\u0442\u0430\u0440\u0435\u0439\u043a\u0430 (\u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c \u0438 \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u044d\u043d\u0435\u0440\u0433\u0438\u0438)<\/li>\n<li>\u0417\u0430\u043f\u0440\u0435\u0442 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f (\u043f\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u043c\u0443 \u0441\u043b\u043e\u044e \u0432 \u044d\u0442\u043e\u0439 \u044f\u0447\u0435\u0439\u043a\u0435)<\/li>\n<li>\u041d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435<\/li>\n<li>\u0414\u0432\u0438\u0436\u0435\u043d\u0438\u0435<\/li>\n<li>\u0424\u0430\u0431\u0440\u0438\u043a\u0430 (\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0434\u0440\u0443\u0433\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b)<\/li>\n<li>\u0421\u0430\u043c\u043e\u0443\u043d\u0438\u0447\u0442\u043e\u0436\u0435\u043d\u0438\u0435<\/li>\n<li>\u041a\u043e\u043b\u043b\u0438\u0437\u0438\u0438 (\u0441 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c\u0438)<\/li>\n<\/ul>\n<p>  \u0414\u043e\u0442\u043e\u0448\u043d\u044b\u0439 \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044c \u043c\u043e\u0436\u0435\u0442 \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0437\u0434\u0435\u0441\u044c \u043d\u0435\u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u0441\u0442\u0432\u043e, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u043e\u0447\u0435\u043c\u0443-\u0442\u043e \u201c\u0441\u043b\u043e\u0439\u201d \u0438 \u201c\u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u201d \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u044b \u043d\u0430 \u0434\u0432\u0430 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430, \u0445\u043e\u0442\u044f \u0432\u0440\u043e\u0434\u0435 \u0431\u044b \u043e\u043d\u0438 \u043f\u0440\u043e \u043e\u0434\u043d\u043e \u0438 \u0442\u043e \u0436\u0435. \u0418 \u0447\u0442\u043e \u0437\u0430 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e \u0442\u0430\u043a\u043e\u0435 \u201c\u043a\u043e\u043b\u043b\u0438\u0437\u0438\u0438\u201d? \u0410 \u201c\u0424\u0430\u0431\u0440\u0438\u043a\u0430\u201d? \u0410 \u201c\u0412\u043e\u0437\u0440\u0430\u0441\u0442\u201d \u0438 \u201c\u0421\u0430\u043c\u043e\u0443\u043d\u0438\u0447\u0442\u043e\u0436\u0435\u043d\u0438\u0435\u201d? \u0418 \u0437\u0430\u0447\u0435\u043c \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u043e\u0431\u044a\u0435\u043a\u0442\u0443 \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u043e\u0435 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0436\u0438\u0440\u0430\u0442\u044c \u043f\u0430\u043c\u044f\u0442\u044c? \u041f\u0440\u0435\u0442\u0435\u043d\u0437\u0438\u0438 \u043e\u0431\u043e\u0441\u043d\u043e\u0432\u0430\u043d\u043d\u044b\u0435, \u2014 \u0438 \u0443\u0436\u0435 \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u044d\u043f\u043e\u0445\u0435 \u0441\u043f\u0438\u0441\u043e\u043a \u0431\u044b\u043b \u0435\u0449\u0435 \u0440\u0430\u0437 \u043f\u0435\u0440\u0435\u0441\u043c\u043e\u0442\u0440\u0435\u043d, \u043f\u0440\u0438\u0447\u0435\u043c \u0442\u0435\u043c \u0436\u0435 \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c: \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u0435\u043c \u0441\u0432\u043e\u0439\u0441\u0442\u0432 \u0443 \u0441\u0432\u043e\u0439\u0441\u0442\u0432. \u0412 \u0438\u0442\u043e\u0433\u0435 \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0448\u0435\u0441\u0442\u044c, \u0441\u0430\u043c\u044b\u0445 \u0432\u0430\u0436\u043d\u044b\u0445, \u201c\u0440\u0430\u043d\u0442\u0430\u0439\u043c\u043e\u0432\u044b\u0445\u201d \u0438 \u201c\u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445\u201d, \u0430 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043b\u043e\u0433\u0438\u0447\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043f\u0440\u0435\u0432\u0440\u0430\u0442\u0438\u043b\u0438\u0441\u044c \u0432\u043e \u0432\u043d\u0435\u0448\u043d\u0438\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u044b \u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f\u2026<\/p>\n<p>  \u0414\u043b\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0441\u043b\u043e\u0432\u0435\u0441\u043d\u043e \u043e\u043f\u0438\u0448\u0435\u043c \u043f\u0430\u0440\u0443 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0433\u043b\u0438 \u0431\u044b \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u043d\u0430 \u0438\u0433\u0440\u043e\u0432\u043e\u0439 \u043a\u0430\u0440\u0442\u0435:<\/p>\n<blockquote><p>\u042f\u0434\u0440\u043e:<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;\u0418\u043c\u044f&nbsp;<font color=\"#339933\">=<\/font>&nbsp;\u201cKaryon\u201d<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;\u0420\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435&nbsp;<font color=\"#339933\">=<\/font>&nbsp;<font>(<\/font><font>1<\/font><font color=\"#339933\">,<\/font>&nbsp;<font>1<\/font><font color=\"#339933\">,<\/font>&nbsp;<font>1<\/font><font>)<\/font><br \/>  &nbsp;&nbsp;&nbsp;&nbsp;\u0421\u043b\u043e\u0439&nbsp;<font color=\"#339933\">=<\/font>&nbsp;\u0417\u0435\u043c\u043b\u044f<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;\u0412\u043b\u0430\u0434\u0435\u043b\u0435\u0446&nbsp;<font color=\"#339933\">=<\/font>&nbsp;\u0418\u0433\u0440\u043e\u043a<font>1<\/font><br \/>  &nbsp;&nbsp;&nbsp;&nbsp;\u041f\u0440\u043e\u0447\u043d\u043e\u0441\u0442\u044c&nbsp;<font color=\"#339933\">=<\/font>&nbsp;<font>100<\/font>&nbsp;<font color=\"#339933\">\/<\/font>&nbsp;<font>100<\/font><br \/>  &nbsp;&nbsp;&nbsp;&nbsp;\u0411\u0430\u0442\u0430\u0440\u0435\u0439\u043a\u0430&nbsp;<font color=\"#339933\">=<\/font>&nbsp;<font>300<\/font>&nbsp;<font color=\"#339933\">\/<\/font>&nbsp;<font>2000<\/font><br \/>  &nbsp;&nbsp;&nbsp;&nbsp;\u0424\u0430\u0431\u0440\u0438\u043a\u0430&nbsp;<font color=\"#339933\">=<\/font>&nbsp;\u041f\u043b\u0430\u0437\u043c\u0430<font color=\"#339933\">,<\/font>&nbsp;\u0418\u0433\u0440\u043e\u043a<font>1<\/font><br \/>  &nbsp;<br \/>  \u041f\u043b\u0430\u0437\u043c\u0430:<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;\u0418\u043c\u044f&nbsp;<font color=\"#339933\">=<\/font>&nbsp;\u201cPlasma\u201d<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;\u0420\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435&nbsp;<font color=\"#339933\">=<\/font>&nbsp;<font>(<\/font><font>2<\/font><font color=\"#339933\">,<\/font>&nbsp;<font>1<\/font><font color=\"#339933\">,<\/font>&nbsp;<font>1<\/font><font>)<\/font><br \/>  &nbsp;&nbsp;&nbsp;&nbsp;\u0421\u043b\u043e\u0439&nbsp;<font color=\"#339933\">=<\/font>&nbsp;\u0417\u0435\u043c\u043b\u044f<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;\u0412\u043b\u0430\u0434\u0435\u043b\u0435\u0446&nbsp;<font color=\"#339933\">=<\/font>&nbsp;\u0418\u0433\u0440\u043e\u043a<font>1<\/font><br \/>  &nbsp;&nbsp;&nbsp;&nbsp;\u041f\u0440\u043e\u0447\u043d\u043e\u0441\u0442\u044c&nbsp;<font color=\"#339933\">=<\/font>&nbsp;<font>30<\/font>&nbsp;<font color=\"#339933\">\/<\/font>&nbsp;<font>40<\/font><\/p><\/blockquote>\n<p>  \u0422\u0430\u043a \u043a\u0430\u043a \u0441\u0432\u043e\u0439\u0441\u0442\u0432 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e, \u0440\u0435\u0448\u0435\u043d\u043e \u0431\u044b\u043b\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0442\u0438\u043f-\u043e\u0431\u0435\u0440\u0442\u043a\u0443 \u0438 \u0440\u0430\u0437\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0438\u0445 \u0432\u0441\u0435\u0445 \u043f\u043e\u0434 \u043e\u0434\u043d\u0438\u043c \u0430\u043b\u0433\u0435\u0431\u0440\u0430\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u0442\u0438\u043f\u043e\u043c (<a href=\"https:\/\/github.com\/graninas\/The-Amoeba-World\/blob\/af5e9d4512d2ff907d983358cf8e000840f5a624\/Amoeba\/GameLogic\/Object.hs\">\u043a\u043e\u0434<\/a>):<\/p>\n<blockquote><p><font color=\"#5d478b\">&#8212;&nbsp;Object.hs:<\/font><br \/>  <font>data<\/font>&nbsp;Property&nbsp;<font color=\"#339933\">=<\/font>&nbsp;PNamed&nbsp;Named<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#339933\">|<\/font>&nbsp;PDurability&nbsp;<font>(<\/font>Resource&nbsp;Durability<font>)<\/font><br \/>  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#339933\">|<\/font>&nbsp;PBattery&nbsp;<font>(<\/font>Resource&nbsp;Energy<font>)<\/font><br \/>  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#339933\">|<\/font>&nbsp;POwnership&nbsp;Player<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#339933\">|<\/font>&nbsp;PLayer&nbsp;Layer<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#339933\">&#8230;<\/font><br \/>  &nbsp;&nbsp;<font>deriving<\/font>&nbsp;<font>(<\/font><font color=\"#cccc00\">Show<\/font><font color=\"#339933\">,<\/font>&nbsp;<font color=\"#cccc00\">Read<\/font><font color=\"#339933\">,<\/font>&nbsp;<font color=\"#cccc00\">Eq<\/font><font>)<\/font><\/p><\/blockquote>\n<p>  \u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043c \u0442\u0438\u043f \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0442\u043d\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430:<\/p>\n<blockquote><p><font color=\"#5d478b\">&#8212;&nbsp;Object.hs:<\/font><br \/>  <font>type<\/font>&nbsp;PropertyKey&nbsp;<font color=\"#339933\">=<\/font>&nbsp;<font color=\"#cccc00\">Int<\/font><br \/>  <font>type<\/font>&nbsp;PropertyMap&nbsp;<font color=\"#339933\">=<\/font>&nbsp;M<font color=\"#339933\">.<\/font>Map&nbsp;PropertyKey&nbsp;Property<br \/>  &nbsp;<br \/>  <font>data<\/font>&nbsp;Object&nbsp;<font color=\"#339933\">=<\/font>&nbsp;Object&nbsp;<font>{<\/font>&nbsp;propertyMap&nbsp;<font color=\"#339933\">::<\/font>&nbsp;PropertyMap&nbsp;<font>}<\/font><br \/>  &nbsp;&nbsp;<font>deriving<\/font>&nbsp;<font>(<\/font><font color=\"#cccc00\">Show<\/font><font color=\"#339933\">,<\/font>&nbsp;<font color=\"#cccc00\">Read<\/font><font color=\"#339933\">,<\/font>&nbsp;<font color=\"#cccc00\">Eq<\/font><font>)<\/font><\/p><\/blockquote>\n<p>  \u041f\u0435\u0440\u0432\u0430\u044f \u043c\u044b\u0441\u043b\u044c, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043d\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u0432\u0438\u0434\u0435 Property, \u2014 \u0447\u0442\u043e \u043c\u044b \u0432\u0435\u0440\u043d\u0443\u043b\u0438\u0441\u044c \u043a \u0442\u043e\u043c\u0443, \u0441 \u0447\u0435\u0433\u043e \u043d\u0430\u0447\u0438\u043d\u0430\u043b\u0438, \u0442\u043e \u0435\u0441\u0442\u044c, \u043a \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0435 God ADT (\u0432 \u0442\u043e\u0442 \u043c\u043e\u043c\u0435\u043d\u0442 \u044d\u0442\u043e \u0431\u044b\u043b \u0442\u0438\u043f Item). \u041e\u0434\u043d\u0430\u043a\u043e \u044d\u0442\u043e \u043d\u0435 \u0442\u0430\u043a. \u0421\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 \u0440\u0430\u0437\u043b\u0438\u0447\u0438\u0435 \u2014 \u0432 \u0443\u0440\u043e\u0432\u043d\u0435 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043d\u0430\u043c \u0442\u0438\u043f Object. \u0423 \u043d\u0430\u0441 \u043f\u043e\u044f\u0432\u0438\u043b\u043e\u0441\u044c \u0442\u043e, \u0447\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0437\u0432\u0430\u0442\u044c \u201c\u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0442\u043e\u0440\u043d\u043e\u0439 \u0441\u0432\u043e\u0431\u043e\u0434\u043e\u0439\u201d: \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u0432\u043e\u0439\u0441\u0442\u0432 \u0434\u0430\u0435\u0442 \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0442\u043e\u0440\u043d\u044b\u0439 \u0432\u0437\u0440\u044b\u0432 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439 \u043f\u043e \u043a\u043e\u043c\u043f\u043e\u043d\u043e\u0432\u043a\u0435 \u043d\u043e\u0432\u044b\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432. \u041a\u0430\u043a\u0438\u0445-\u0442\u043e \u0438\u043d\u044b\u0445 \u0441\u0432\u043e\u0439\u0441\u0442\u0432 \u043d\u0435 \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u0435\u0442\u0441\u044f, \u2014 \u0430 \u0435\u0441\u043b\u0438 \u0442\u0430\u043a\u043e\u0432\u044b\u0435 \u0438 \u043f\u043e\u044f\u0432\u044f\u0442\u0441\u044f, \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043d\u0435 \u0431\u0443\u0434\u0443\u0442 \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u044f\u0442\u044c\u0441\u044f \u043f\u043e \u043a\u043e\u0434\u0443, \u0441\u043b\u043e\u0432\u043d\u043e \u0432\u043e\u043b\u043d\u0430 \u043f\u043e \u0434\u043e\u043c\u0438\u043d\u043e\u0448\u043a\u0430\u043c. \u041c\u044b \u0443\u0431\u0435\u0434\u0438\u043c\u0441\u044f \u0432 \u044d\u0442\u043e\u043c, \u043a\u043e\u0433\u0434\u0430 \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u043e \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u044f\u0445, \u0430 \u043f\u043e\u043a\u0430 \u0437\u0430\u0434\u0430\u0434\u0438\u043c\u0441\u044f \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u043c: \u043a\u0430\u043a \u0436\u0435 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u044d\u0442\u0438 \u0441\u0430\u043c\u044b\u0435 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b?<\/p>\n<p>  \u0421\u0430\u043c\u044b\u0439 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u2014 \u0437\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u0441\u0432\u043e\u0439\u0441\u0442\u0432 \u0438 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0432 <a href=\"http:\/\/hackage.haskell.org\/package\/containers-0.5.5.1\/docs\/Data-Map.html\">Data.Map<\/a>:<\/p>\n<blockquote><p><font color=\"#5d478b\">&#8212;&nbsp;Objects.hs:<\/font><br \/>  <font>import<\/font>&nbsp;Object<br \/>  &nbsp;<br \/>  karyon&nbsp;<font color=\"#339933\">=<\/font>&nbsp;Object&nbsp;<font color=\"#339933\">$<\/font>&nbsp;M<font color=\"#339933\">.<\/font>fromList&nbsp;<font>[<\/font>&nbsp;<font>(<\/font><font>1<\/font><font color=\"#339933\">,<\/font>&nbsp;PObjectId&nbsp;<font>1<\/font><font>)<\/font><br \/>  &nbsp;<font color=\"#339933\">,<\/font>&nbsp;<font>(<\/font><font>4<\/font><font color=\"#339933\">,<\/font>&nbsp;PNamed&nbsp;\u201cKaryon\u201d<font>)<\/font><br \/>  &nbsp;<font color=\"#339933\">,<\/font>&nbsp;<font>(<\/font><font>2<\/font><font color=\"#339933\">,<\/font>&nbsp;PDurability&nbsp;<font>(<\/font>Resource&nbsp;<font>100<\/font>&nbsp;<font>100<\/font><font>)<\/font><font>)<\/font><br \/>  &nbsp;<font color=\"#339933\">,<\/font>&nbsp;<font>(<\/font><font>3<\/font><font color=\"#339933\">,<\/font>&nbsp;PBattery&nbsp;<font>(<\/font>Resource&nbsp;<font>300<\/font>&nbsp;<font>2000<\/font><font>)<\/font><font>)<\/font><br \/>  &nbsp;<font color=\"#339933\">,<\/font>&nbsp;<font>(<\/font><font>10<\/font><font color=\"#339933\">,<\/font>&nbsp;POwnership&nbsp;Player1<font>)<\/font><br \/>  &nbsp;<font color=\"#339933\">,<\/font>&nbsp;<font>(<\/font><font>5<\/font><font color=\"#339933\">,<\/font>&nbsp;PDislocation&nbsp;<font>(<\/font>Point&nbsp;<font>1<\/font>&nbsp;<font>1<\/font>&nbsp;<font>1<\/font><font>)<\/font><font>)<\/font><br \/>  &nbsp;<font color=\"#339933\">,<\/font>&nbsp;<font color=\"#339933\">&#8230;<\/font><font>]<\/font><\/p><\/blockquote>\n<p>  \u2026 \u043d\u043e \u0441\u0442\u043e\u043f! \u041f\u043e \u043a\u0430\u043a\u043e\u0439 \u0442\u0430\u043a\u043e\u0439 \u043b\u043e\u0433\u0438\u043a\u0435 \u043c\u044b \u043f\u0440\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c PObjectId, Dislocation \u0438 Ownership? \u0412\u0435\u0434\u044c \u043e \u043d\u0438\u0445 \u0438\u043c\u0435\u0435\u0442 \u0441\u043c\u044b\u0441\u043b \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432, \u043d\u0430\u0445\u043e\u0434\u044f\u0449\u0438\u0445\u0441\u044f \u043d\u0430 \u043a\u0430\u0440\u0442\u0435! \u0421 \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b, \u0435\u0441\u0442\u044c \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u043e\u0431\u0449\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0437\u0430\u0434\u0430\u044e\u0442 \u043a\u043b\u0430\u0441\u0441 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0438 \u043f\u043e\u0442\u043e\u043c \u043d\u0435 \u0438\u0437\u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f: PNamed \u0438 PLayer, PFabric \u0438 PPassRestriction (\u0437\u0430\u043f\u0440\u0435\u0442 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f). \u0423 Karyon \u0441\u043b\u043e\u0439 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e Ground, \u0430 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e PNamed \u201cPlasma\u201d \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0430\u0442\u044c, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043b\u0430\u0437\u043c\u0435. \u0417\u0434\u0435\u0441\u044c \u043c\u044b \u0441\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u0435\u043c\u0441\u044f \u0441 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043e\u0439, \u0447\u0442\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u043f\u0440\u0438 \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u043c \u043f\u043e\u043c\u0435\u0449\u0435\u043d\u0438\u0438 \u043d\u0430 \u043a\u0430\u0440\u0442\u0443, \u0438 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043d\u0443\u0436\u043d\u043e \u0438\u043c\u0435\u0442\u044c \u0448\u0430\u0431\u043b\u043e\u043d\u044b \u0441 \u043f\u0435\u0440\u0432\u043e\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u043c\u0438. \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432 \u043f\u043e\u0434\u043e\u0439\u0434\u0443\u0442 \u0442\u0430\u043a \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0435 \u201c<a href=\"http:\/\/www.haskell.org\/haskellwiki\/Smart_constructors\">\u0443\u043c\u043d\u044b\u0435 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u044b<\/a>\u201d \u2014 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043d\u0430\u043c \u0433\u043e\u0442\u043e\u0432\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 \u043f\u043e \u0433\u043e\u0442\u043e\u0432\u044b\u043c \u043b\u0435\u043a\u0430\u043b\u0430\u043c \u0438 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u043c\u0443 \u043d\u0430\u0431\u043e\u0440\u0443 \u0432\u0445\u043e\u0434\u043d\u044b\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432. \u0412\u043e\u0442 \u043a\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0431\u043e\u043b\u0435\u0435 \u0443\u043c\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f karyon:<\/p>\n<blockquote><p><font color=\"#5d478b\">&#8212;&nbsp;Objects.hs:<\/font><br \/>  <font>import<\/font>&nbsp;Object<br \/>  &nbsp;<br \/>  karyon&nbsp;pId&nbsp;player&nbsp;point&nbsp;<font color=\"#339933\">=<\/font>&nbsp;Object&nbsp;<font color=\"#339933\">$<\/font>&nbsp;M<font color=\"#339933\">.<\/font>fromList&nbsp;<font>[<\/font>&nbsp;<font>(<\/font><font>1<\/font><font color=\"#339933\">,<\/font>&nbsp;PObjectId&nbsp;pId<font>)<\/font><br \/>  &nbsp;<font color=\"#339933\">,<\/font>&nbsp;<font>(<\/font><font>4<\/font><font color=\"#339933\">,<\/font>&nbsp;PNamed&nbsp;\u201cKaryon\u201d<font>)<\/font><br \/>  &nbsp;<font color=\"#339933\">,<\/font>&nbsp;<font>(<\/font><font>2<\/font><font color=\"#339933\">,<\/font>&nbsp;PDurability&nbsp;<font>(<\/font>Resource&nbsp;<font>100<\/font>&nbsp;<font>100<\/font><font>)<\/font><font>)<\/font><br \/>  &nbsp;<font color=\"#339933\">,<\/font>&nbsp;<font>(<\/font><font>3<\/font><font color=\"#339933\">,<\/font>&nbsp;PBattery&nbsp;<font>(<\/font>Resource&nbsp;<font>300<\/font>&nbsp;<font>2000<\/font><font>)<\/font><font>)<\/font><br \/>  &nbsp;<font color=\"#339933\">,<\/font>&nbsp;<font>(<\/font><font>10<\/font><font color=\"#339933\">,<\/font>&nbsp;POwnership&nbsp;player<font>)<\/font><br \/>  &nbsp;<font color=\"#339933\">,<\/font>&nbsp;<font>(<\/font><font>5<\/font><font color=\"#339933\">,<\/font>&nbsp;PDislocation&nbsp;point<font>)<\/font><br \/>  &nbsp;<font color=\"#339933\">,<\/font>&nbsp;<font color=\"#339933\">&#8230;<\/font><font>]<\/font><\/p><\/blockquote>\n<p>  \u0414\u0430\u043d\u043d\u044b\u0439 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 \u0442\u0440\u0443\u0434\u043d\u043e \u043d\u0430\u0437\u0432\u0430\u0442\u044c \u0438\u0437\u044f\u0449\u043d\u044b\u043c, \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043c\u043d\u043e\u0433\u043e \u201c\u0448\u0443\u043c\u0430\u201d \u0438 \u0442\u0435\u043b\u043e\u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0439. Haskell \u2014 \u043b\u0430\u043a\u043e\u043d\u0438\u0447\u043d\u044b\u0439 \u044f\u0437\u044b\u043a, \u0438 \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0441\u0442\u0440\u0435\u043c\u0438\u0442\u044c\u0441\u044f \u043a \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u0435 \u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u043c\u0443 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u0438\u0437\u043c\u0443, \u0442\u043e\u0433\u0434\u0430 \u043a\u043e\u0434 \u0431\u0443\u0434\u0435\u0442 \u043a\u0440\u0430\u0441\u0438\u0432\u0435\u0435, \u043f\u043e\u043d\u044f\u0442\u043d\u0435\u0435 \u0438 \u0443\u0434\u043e\u0431\u043d\u0435\u0435. \u0410\u0445, \u043a\u0430\u043a \u0431\u044b \u0431\u044b\u043b\u043e \u0445\u043e\u0440\u043e\u0448\u043e, \u0435\u0441\u043b\u0438 \u0431\u044b \u0441\u043b\u043e\u0432\u0435\u0441\u043d\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0448\u0430\u0431\u043b\u043e\u043d\u0430, \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u043e\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c\u0438 \u0430\u0431\u0437\u0430\u0446\u0430\u043c\u0438 \u0432\u044b\u0448\u0435, \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u043f\u0435\u0440\u0435\u043d\u0435\u0441\u0442\u0438 \u0432 \u043a\u043e\u0434\u2026 \u041d\u0435\u0442 \u043d\u0438\u0447\u0435\u0433\u043e <a href=\"https:\/\/github.com\/graninas\/The-Amoeba-World\/blob\/af5e9d4512d2ff907d983358cf8e000840f5a624\/Amoeba\/GameLogic\/Objects.hs\">\u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0433\u043e<\/a>!<\/p>\n<blockquote><p><font color=\"#5d478b\">&#8212;&nbsp;Objects.hs<\/font><br \/>  plasmaFabric&nbsp;<font color=\"#339933\">::<\/font>&nbsp;Player&nbsp;<font color=\"#339933\">-&gt;<\/font>&nbsp;Point&nbsp;<font color=\"#339933\">-&gt;<\/font>&nbsp;Fabric<br \/>  plasmaFabric&nbsp;pl&nbsp;p&nbsp;<font color=\"#339933\">=<\/font>&nbsp;makeObject&nbsp;<font color=\"#339933\">$<\/font>&nbsp;<font>do<\/font><br \/>  &nbsp;&nbsp;&nbsp;&nbsp;energyCost&nbsp;&nbsp;&nbsp;<font color=\"#339933\">.=<\/font>&nbsp;<font>1<\/font><br \/>  &nbsp;&nbsp;&nbsp;&nbsp;scheme&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#339933\">.=<\/font>&nbsp;plasma&nbsp;pl&nbsp;p<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;producing&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#339933\">.=<\/font>&nbsp;True<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;placementAlg&nbsp;<font color=\"#339933\">.=<\/font>&nbsp;placeToNearestEmptyCell<br \/>  &nbsp;<br \/>  karyon&nbsp;<font color=\"#339933\">::<\/font>&nbsp;Player&nbsp;<font color=\"#339933\">-&gt;<\/font>&nbsp;Point&nbsp;<font color=\"#339933\">-&gt;<\/font>&nbsp;Object<br \/>  karyon&nbsp;pl&nbsp;p&nbsp;<font color=\"#339933\">=<\/font>&nbsp;makeObject&nbsp;<font color=\"#339933\">$<\/font>&nbsp;<font>do<\/font><br \/>  &nbsp;&nbsp;&nbsp;&nbsp;namedA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#339933\">|=<\/font>&nbsp;karyonName<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;layerA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#339933\">|=<\/font>&nbsp;ground<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;dislocationA&nbsp;<font color=\"#339933\">|=<\/font>&nbsp;p<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;batteryA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#339933\">|=<\/font>&nbsp;<font>(<\/font><font>300<\/font><font color=\"#339933\">,<\/font>&nbsp;Just&nbsp;<font>2000<\/font><font>)<\/font><br \/>  &nbsp;&nbsp;&nbsp;&nbsp;durabilityA&nbsp;&nbsp;<font color=\"#339933\">|=<\/font>&nbsp;<font>(<\/font><font>100<\/font><font color=\"#339933\">,<\/font>&nbsp;Just&nbsp;<font>100<\/font><font>)<\/font><br \/>  &nbsp;&nbsp;&nbsp;&nbsp;ownershipA&nbsp;&nbsp;&nbsp;<font color=\"#339933\">|=<\/font>&nbsp;pl<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;fabricA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#339933\">|=<\/font>&nbsp;plasmaFabric&nbsp;pl&nbsp;p<\/p><\/blockquote>\n<p>  \u041f\u043e\u043d\u044f\u0442\u043d\u043e\u0441\u0442\u044c \u043a\u043e\u0434\u0430 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0442\u043e\u0433\u043e, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0437\u043d\u0430\u043d\u0438\u044f \u0438 \u043c\u044b\u0448\u043b\u0435\u043d\u0438\u0435 \u0447\u0438\u0442\u0430\u044e\u0449\u0435\u0433\u043e \u0441\u043e\u0432\u043f\u0430\u043b\u0438 \u0441\u043e \u0437\u043d\u0430\u043d\u0438\u044f\u043c\u0438 \u0438 \u043c\u044b\u0448\u043b\u0435\u043d\u0438\u0435\u043c \u0430\u0432\u0442\u043e\u0440\u0430. \u041f\u043e\u043d\u044f\u0442\u0435\u043d \u043b\u0438 \u044d\u0442\u043e\u0442 \u043a\u043e\u0434? \u042f\u0441\u043d\u043e, \u0447\u0442\u043e \u043e\u043d \u0434\u0435\u043b\u0430\u0435\u0442, \u043d\u043e \u043a\u0430\u043a \u043e\u043d \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442? \u0427\u0442\u043e, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0437\u0434\u0435\u0441\u044c \u0437\u043d\u0430\u0447\u0430\u0442 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b \u201c.=\u201d \u0438 \u201c|=\u201d? \u041a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u044f makeObject? \u041f\u043e\u0447\u0435\u043c\u0443 \u0443 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0439 \u0435\u0441\u0442\u044c \u0431\u0443\u043a\u0432\u0430 \u201cA\u201d, \u0430 \u0443 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0435\u0435 \u043d\u0435\u0442? \u0418 \u044d\u0442\u043e \u0447\u0442\u043e, \u043c\u043e\u043d\u0430\u0434\u0430, \u0447\u0442\u043e \u043b\u0438?..<\/p>\n<p>  \u0422\u0443\u043c\u0430\u043d\u043d\u044b\u0439 \u043e\u0442\u0432\u0435\u0442 \u043d\u0430 \u044d\u0442\u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0435 \u0432\u043e\u043f\u0440\u043e\u0441\u044b \u0437\u0432\u0443\u0447\u0438\u0442 \u0442\u0430\u043a: \u0432 \u044d\u0442\u043e\u043c \u043a\u043e\u0434\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0439 \u044f\u0437\u044b\u043a \u043f\u043e \u043a\u043e\u043c\u043f\u043e\u043d\u043e\u0432\u043a\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432. \u0415\u0433\u043e \u0434\u0438\u0437\u0430\u0439\u043d \u043e\u0441\u043d\u043e\u0432\u0430\u043d \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u043b\u0438\u043d\u0437 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u043d\u043e \u0441 \u043c\u043e\u043d\u0430\u0434\u043e\u0439 State. \u0424\u0443\u043d\u043a\u0446\u0438\u0438 \u0441 \u201cA\u201d-\u043f\u043e\u0441\u0442\u0444\u0438\u043a\u0441\u0430\u043c\u0438 \u2014 \u044d\u0442\u043e \u0443\u043c\u043d\u044b\u0435 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u044b (\u201c\u0430\u043a\u0441\u0435\u0441\u0441\u043e\u0440\u044b\u201d) \u0441\u0430\u043c\u0438\u0445 \u0441\u0432\u043e\u0439\u0441\u0442\u0432, \u0437\u043d\u0430\u044e\u0449\u0438\u0435 \u043f\u043e\u0440\u044f\u0434\u043a\u043e\u0432\u044b\u0439 \u043d\u043e\u043c\u0435\u0440 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0438 \u0443\u043c\u0435\u044e\u0449\u0438\u0435 \u0432\u0430\u043b\u0438\u0434\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f. \u0424\u0443\u043d\u043a\u0446\u0438\u0438 \u0431\u0435\u0437 \u201c\u0410\u201d \u2014 \u044d\u0442\u043e \u043b\u0438\u043d\u0437\u044b. \u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u201c.=\u201d \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0438\u0442 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435 \u043b\u0438\u043d\u0437 \u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0432\u043d\u0443\u0442\u0440\u0438 \u043c\u043e\u043d\u0430\u0434\u044b State \u0437\u0430\u0434\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u043d\u0430\u0445\u043e\u0434\u044f\u0449\u0435\u0435\u0441\u044f \u201c\u043f\u043e\u0434 \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u0435\u043c\u201d. \u0424\u0443\u043d\u043a\u0446\u0438\u044f plasmaFabric \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0410\u0414\u0422 Fabric, \u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f karyon \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u0442 PropertyMap \u0438 Object. \u0412\u043e \u0432\u0442\u043e\u0440\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0430\u043a\u0441\u0435\u0441\u0441\u043e\u0440\u044b \u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0442\u0441\u044f \u0432 \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0439 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 |=, \u0434\u043b\u044f \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0441\u0442\u0438 \u0431\u0443\u0434\u0435\u043c \u043d\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u201c\u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u043c \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f\u201d. \u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0432\u043d\u0443\u0442\u0440\u0438 \u043c\u043e\u043d\u0430\u0434\u044b State. \u041e\u043d \u0432\u044b\u0442\u0430\u0441\u043a\u0438\u0432\u0430\u0435\u0442 \u0442\u0435\u043a\u0443\u0449\u0443\u044e PropertyMap \u0438 \u043f\u043e\u043c\u0435\u0449\u0430\u0435\u0442 \u0432 \u043d\u0435\u0435 \u043f\u0440\u043e\u0432\u0430\u043b\u0438\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u0430\u043a\u0441\u0435\u0441\u0441\u043e\u0440\u043e\u043c \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e:<\/p>\n<blockquote><p><font color=\"#5d478b\">&#8212;&nbsp;Object.hs:<\/font><br \/>  makeObject&nbsp;<font color=\"#339933\">::<\/font>&nbsp;Default&nbsp;a&nbsp;<font color=\"#339933\">=&gt;<\/font>&nbsp;State&nbsp;a&nbsp;<font>(<\/font><font>)<\/font>&nbsp;<font color=\"#339933\">-&gt;<\/font>&nbsp;a<br \/>  makeObject&nbsp;<font color=\"#339933\">=<\/font>&nbsp;<font>flip<\/font>&nbsp;execState&nbsp;def<br \/>  &nbsp;<br \/>  <font>data<\/font>&nbsp;PAccessor&nbsp;a&nbsp;<font color=\"#339933\">=<\/font>&nbsp;PAccessor&nbsp;<font>{<\/font>&nbsp;key&nbsp;<font color=\"#339933\">::<\/font>&nbsp;PropertyKey<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#339933\">,<\/font>&nbsp;constr&nbsp;<font color=\"#339933\">::<\/font>&nbsp;a&nbsp;<font color=\"#339933\">-&gt;<\/font>&nbsp;Property&nbsp;<font>}<\/font><br \/>  &nbsp;<br \/>  <font color=\"#5d478b\">&#8212;&nbsp;\u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440&nbsp;\u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f&nbsp;\u0441\u0432\u043e\u0439\u0441\u0442\u0432:<\/font><br \/>  <font>(<\/font><font color=\"#339933\">|=<\/font><font>)<\/font>&nbsp;accessor&nbsp;v&nbsp;<font color=\"#339933\">=<\/font>&nbsp;<font>do<\/font><br \/>  &nbsp;&nbsp;&nbsp;&nbsp;props&nbsp;<font color=\"#339933\">&lt;-<\/font>&nbsp;get<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;<font>let<\/font>&nbsp;oldPropMap&nbsp;<font color=\"#339933\">=<\/font>&nbsp;<font color=\"#339933\">_<\/font>propertyMap&nbsp;props<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;<font>let<\/font>&nbsp;newPropMap&nbsp;<font color=\"#339933\">=<\/font>&nbsp;insertProperty&nbsp;<font>(<\/font>key&nbsp;accessor<font>)<\/font>&nbsp;<font>(<\/font>constr&nbsp;accessor&nbsp;v<font>)<\/font>&nbsp;oldPropMap<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;put&nbsp;<font color=\"#339933\">$<\/font>&nbsp;props&nbsp;<font>{<\/font>&nbsp;<font color=\"#339933\">_<\/font>propertyMap&nbsp;<font color=\"#339933\">=<\/font>&nbsp;newPropMap&nbsp;<font>}<\/font><br \/>  &nbsp;<br \/>  <font color=\"#5d478b\">&#8212;&nbsp;\u0410\u043a\u0441\u0435\u0441\u0441\u043e\u0440&nbsp;\u0434\u043b\u044f&nbsp;\u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430&nbsp;Named:<\/font><br \/>  isNamedValid&nbsp;<font>(<\/font>Named&nbsp;n<font>)<\/font>&nbsp;<font color=\"#339933\">=<\/font>&nbsp;<font>not<\/font>&nbsp;<font color=\"#339933\">.<\/font>&nbsp;<font>null<\/font>&nbsp;<font color=\"#339933\">$<\/font>&nbsp;n<br \/>  namedValidator&nbsp;n&nbsp;<font color=\"#339933\">|<\/font>&nbsp;isNamedValid&nbsp;n&nbsp;<font color=\"#339933\">=<\/font>&nbsp;n<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#339933\">|<\/font>&nbsp;<font>otherwise<\/font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#339933\">=<\/font>&nbsp;<font>error<\/font>&nbsp;<font color=\"#339933\">$<\/font>&nbsp;<font>&quot;Invalid&nbsp;named&nbsp;property:&nbsp;&quot;<\/font>&nbsp;<font color=\"#339933\">++<\/font>&nbsp;<font>show<\/font>&nbsp;n<br \/>  &nbsp;<br \/>  namedA&nbsp;<font color=\"#339933\">=<\/font>&nbsp;PAccessor&nbsp;<font>0<\/font>&nbsp;<font color=\"#339933\">$<\/font>&nbsp;PNamed&nbsp;<font color=\"#339933\">.<\/font>&nbsp;namedValidator<\/p><\/blockquote>\n<p>  \u042d\u0442\u043e\u0442 \u0434\u0438\u0437\u0430\u0439\u043d \u043d\u0435 \u0438\u0434\u0435\u0430\u043b\u0435\u043d. \u041e\u0447\u0435\u043d\u044c \u043e\u043f\u0430\u0441\u043d\u043e\u0439 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u044f \u0441\u0432\u043e\u0439\u0441\u0442\u0432, \u0442\u0430\u043a \u043a\u0430\u043a \u043e\u043d\u0430 \u043c\u043e\u0436\u0435\u0442 \u0443\u043f\u0430\u0441\u0442\u044c \u0441 \u043e\u0448\u0438\u0431\u043a\u043e\u0439 \u0432 \u0440\u0430\u043d\u0442\u0430\u0439\u043c\u0435. \u041c\u044b \u0442\u0430\u043a\u0436\u0435 \u043d\u0435 \u0441\u043b\u0435\u0434\u0438\u043c \u0437\u0430 \u0442\u0435\u043c, \u0435\u0441\u0442\u044c \u043b\u0438 \u0443\u0436\u0435 \u0442\u0430\u043a\u043e\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e \u0432 \u043d\u0430\u0431\u043e\u0440\u0435, \u2014 \u043f\u0440\u043e\u0441\u0442\u043e \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u043f\u043e\u0432\u0435\u0440\u0445 \u043d\u0435\u0433\u043e \u043d\u043e\u0432\u043e\u0435. \u0418 \u0442\u043e\u0442, \u0438 \u0434\u0440\u0443\u0433\u043e\u0439 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u043a \u043c\u043e\u0436\u043d\u043e \u043b\u0435\u0433\u043a\u043e \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c, \u0441\u043e\u0437\u0434\u0430\u0432 \u0441\u0442\u0435\u043a \u0438\u0437 \u043c\u043e\u043d\u0430\u0434 Either \u0438 State, \u0438 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u043a\u043e\u0434 \u0432 \u043c\u043e\u0434\u0443\u043b\u0435 \u0441 \u0448\u0430\u0431\u043b\u043e\u043d\u0430\u043c\u0438 (Objects.hs) \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u0441\u044f \u043d\u0435\u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e. \u041f\u043b\u044e\u0441\u043e\u0432 \u043c\u043d\u043e\u0433\u043e, \u043d\u043e \u0435\u0441\u0442\u044c \u043e\u0434\u043d\u043e \u0432\u043e\u0437\u0440\u0430\u0436\u0435\u043d\u0438\u0435: \u043f\u043e\u043a\u0430 \u044f\u0437\u044b\u043a \u043a\u043e\u043c\u043f\u043e\u043d\u043e\u0432\u043a\u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043b\u0438\u0448\u044c \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432, \u0438 \u043f\u043e\u043a\u0430 \u0438\u0445 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u043b\u0438\u0448\u043d\u044f\u044f \u043b\u043e\u0433\u0438\u043a\u0430 \u0431\u0443\u0434\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043c\u0435\u0448\u0430\u0442\u044c\u0441\u044f. \u0421 \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b, \u043a\u043e\u0433\u0434\u0430 \u044d\u0442\u043e\u0442 \u043a\u043e\u0434 \u043f\u043e\u0439\u0434\u0435\u0442 \u0432 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0438, \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c \u0441\u0442\u0430\u043d\u0435\u0442 \u0432\u0430\u0436\u043d\u043e\u0439.<\/p>\n<p>  \u041d\u0430\u0448 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0432\u043e\u043f\u0440\u043e\u0441, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0439 \u0441 \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c\u0438, \u0442\u0430\u043a\u043e\u0432: \u043a\u0430\u043a \u0442\u0435\u043f\u0435\u0440\u044c \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0438\u043f \u0434\u0430\u043d\u043d\u044b\u0445 World? \u0417\u0434\u0435\u0441\u044c \u043e\u0441\u043e\u0431\u044b\u0445 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043d\u0435 \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u043e, \u043c\u0438\u0440 \u043f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0442\u0438\u043f\u043e\u043c Map:<\/p>\n<blockquote><p><font>type<\/font>&nbsp;World&nbsp;<font color=\"#339933\">=<\/font>&nbsp;M<font color=\"#339933\">.<\/font>Map&nbsp;Point&nbsp;Object<\/p><\/blockquote>\n<p>  \u0423 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b Data.Map \u0441\u0442\u0440\u0430\u0434\u0430\u0435\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c. \u0411\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u043c \u0440\u0435\u0448\u0435\u043d\u0438\u0435\u043c \u0437\u0434\u0435\u0441\u044c \u0432\u0438\u0434\u0438\u0442\u0441\u044f \u0434\u0432\u0443\u043c\u0435\u0440\u043d\u044b\u0439 \u043c\u0430\u0441\u0441\u0438\u0432; \u0432 Haskell \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432, \u0442\u0430\u043a\u0438\u0435 \u043a\u0430\u043a <a href=\"https:\/\/hackage.haskell.org\/package\/vector-0.9.1\">vector<\/a> \u0438\u043b\u0438 <a href=\"https:\/\/hackage.haskell.org\/package\/repa-3.2.5.1\">repa<\/a>. \u041a\u043e\u0433\u0434\u0430 \u0441\u0442\u0430\u043d\u0435\u0442 \u044f\u0441\u043d\u043e, \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0438\u0433\u0440\u044b \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0432\u044b\u0441\u043e\u043a\u0430\u044f, \u043c\u043e\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0432\u0435\u0440\u043d\u0443\u0442\u044c\u0441\u044f \u0438 \u043f\u0435\u0440\u0435\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u043c\u0438\u0440\u0430, \u043d\u043e \u043f\u043e\u043a\u0430 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0432\u0430\u0436\u043d\u0435\u0435.<\/p>\n<p>  <strong>\u0421\u0446\u0435\u043d\u0430\u0440\u0438\u0438<\/strong><\/p>\n<p>  \u0421\u0446\u0435\u043d\u0430\u0440\u0438\u0438 \u2014 \u044d\u0442\u043e \u0437\u0430\u043a\u043e\u043d\u044b \u043c\u0438\u0440\u0430. \u0421\u0446\u0435\u043d\u0430\u0440\u0438\u0438 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442 \u0442\u043e \u0438\u043b\u0438 \u0438\u043d\u043e\u0435 \u044f\u0432\u043b\u0435\u043d\u0438\u0435. \u042f\u0432\u043b\u0435\u043d\u0438\u044f \u0432 \u043c\u0438\u0440\u0435 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0435; \u0432 \u043e\u0434\u043d\u043e\u043c \u044f\u0432\u043b\u0435\u043d\u0438\u0438 \u0443\u0447\u0430\u0441\u0442\u0432\u0443\u044e\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0443\u0436\u043d\u044b\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u043d\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u043c \u0443\u0447\u0430\u0441\u0442\u043a\u0435 \u043a\u0430\u0440\u0442\u044b. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u0440\u0438 \u0432\u0437\u0440\u044b\u0432\u0435 \u0431\u043e\u043c\u0431\u044b \u043d\u0430\u0441 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u0435\u0442 \u043f\u0440\u043e\u0447\u043d\u043e\u0441\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0432 \u0440\u0430\u0434\u0438\u0443\u0441\u0435 N, \u2014 \u0438\u043c\u0435\u043d\u043d\u043e \u0435\u0435 \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u0442\u044c \u043d\u0430 \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u0443 \u0443\u0440\u043e\u043d\u0430, \u0438 \u0435\u0441\u043b\u0438 \u043f\u0440\u043e\u0447\u043d\u043e\u0441\u0442\u044c \u0443\u043f\u0430\u043b\u0430 \u043d\u0438\u0436\u0435 0, \u043d\u0443\u0436\u043d\u043e \u0443\u0431\u0440\u0430\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0441 \u043a\u0430\u0440\u0442\u044b. \u0415\u0441\u043b\u0438 \u0436\u0435 \u0443 \u043d\u0430\u0441 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0444\u0430\u0431\u0440\u0438\u043a\u0430, \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0442\u044c \u0435\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u043c, \u0437\u0430\u0442\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043f\u0440\u043e\u0434\u0443\u043a\u0442 \u0438 \u0440\u0430\u0437\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0435\u0433\u043e \u0433\u0434\u0435-\u0442\u043e \u043d\u0435\u043f\u043e\u0434\u0430\u043b\u0435\u043a\u0443. \u041f\u0440\u043e\u0447\u043d\u043e\u0441\u0442\u044c \u043d\u0435 \u0432\u0430\u0436\u043d\u0430, \u043d\u043e \u0432\u0430\u0436\u043d\u044b \u0440\u0435\u0441\u0443\u0440\u0441\u044b, \u0441\u0430\u043c\u0430 \u0444\u0430\u0431\u0440\u0438\u043a\u0430 \u0438 \u043f\u0443\u0441\u0442\u043e\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u043f\u043e\u0434 \u043f\u0440\u043e\u0434\u0443\u043a\u0442.<\/p>\n<p>  \u0421\u0446\u0435\u043d\u0430\u0440\u0438\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c\u0441\u044f \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0431\u0430\u0437\u043e\u0432\u044b\u0445 \u0441\u0432\u043e\u0439\u0441\u0442\u0432. \u0415\u0441\u043b\u0438 \u043d\u0430 \u043a\u0430\u0440\u0442\u0435 \u0435\u0441\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442 \u0441\u043e \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e\u043c \u201c\u0414\u0432\u0438\u0436\u0435\u043d\u0438\u0435\u201d, \u2014 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043c \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0439 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f. \u0415\u0441\u043b\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0444\u0430\u0431\u0440\u0438\u043a\u0430, \u2014 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043c \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0439 \u043f\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0441\u0442\u0432\u0443 \u0431\u043e\u0435\u0432\u044b\u0445 \u0435\u0434\u0438\u043d\u0438\u0446. \u0421\u0446\u0435\u043d\u0430\u0440\u0438\u044f\u043c \u043d\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u0435\u043d\u043e \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u043c\u0438\u0440; \u043e\u043d\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u043f\u043e\u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e \u0438 \u043d\u0430\u043a\u0430\u043f\u043b\u0438\u0432\u0430\u044e\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0432 \u043e\u0431\u0449\u0435\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 \u0434\u0430\u043d\u043d\u044b\u0445. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u043d\u0443\u0436\u043d\u043e \u0443\u0447\u0435\u0441\u0442\u044c, \u0447\u0442\u043e \u0438\u043d\u043e\u0433\u0434\u0430 \u0440\u0430\u0431\u043e\u0442\u0430 \u043e\u0434\u043d\u0438\u0445 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0435\u0432 \u0432\u043b\u0438\u044f\u0435\u0442 \u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0443 \u0434\u0440\u0443\u0433\u0438\u0445, \u0432\u043f\u043b\u043e\u0442\u044c \u0434\u043e \u043f\u043e\u043b\u043d\u043e\u0439 \u043e\u0442\u043c\u0435\u043d\u044b. <\/p>\n<p>  \u041f\u0440\u043e\u0438\u043b\u043b\u044e\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u043c \u044d\u0442\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u043c\u0438. \u041f\u0443\u0441\u0442\u044c \u0443 \u043d\u0430\u0441 \u0438\u043c\u0435\u0435\u0442\u0441\u044f \u0434\u0432\u0435 \u0444\u0430\u0431\u0440\u0438\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u044f\u0442 \u043f\u043e \u043e\u0434\u043d\u043e\u043c\u0443 \u0442\u0430\u043d\u043a\u0443 \u0441\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u044c\u044e \u0432 1 \u0435\u0434\u0438\u043d\u0438\u0446\u0443. \u0412 \u0437\u0430\u043f\u0430\u0441\u0435 \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0432\u0441\u0435\u0433\u043e 1 \u0435\u0434\u0438\u043d\u0438\u0446\u0430 \u0440\u0435\u0441\u0443\u0440\u0441\u0430. \u041f\u0435\u0440\u0432\u044b\u0439 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0439 \u043e\u0442\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0443\u0441\u043f\u0435\u0448\u043d\u043e, \u043d\u043e \u0432\u0442\u043e\u0440\u043e\u0439 \u0434\u043e\u043b\u0436\u0435\u043d \u0443\u0437\u043d\u0430\u0442\u044c, \u0447\u0442\u043e \u0432\u0441\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u0438\u0437\u0440\u0430\u0441\u0445\u043e\u0434\u043e\u0432\u0430\u043d\u044b, \u0438 \u043f\u0440\u0435\u043a\u0440\u0430\u0442\u0438\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443. \u0418\u043b\u0438 \u0434\u0440\u0443\u0433\u0430\u044f \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f: \u0434\u0432\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0434\u0432\u0438\u0436\u0443\u0442\u0441\u044f \u0432\u0441\u0442\u0440\u0435\u0447\u043d\u044b\u043c\u0438 \u043a\u0443\u0440\u0441\u0430\u043c\u0438. \u041a\u043e\u0433\u0434\u0430 \u043c\u0435\u0436\u0434\u0443 \u043d\u0438\u043c\u0438 \u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u043e\u0434\u043d\u0430 \u043a\u043b\u0435\u0442\u043a\u0430, \u0447\u0442\u043e \u0434\u043e\u043b\u0436\u043d\u043e \u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0442\u0438? \u0421\u0442\u043e\u043b\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u0435 \u0438\u043b\u0438 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f \u043e\u0434\u043d\u043e\u0433\u043e \u0438\u0437 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432? \u041f\u043e\u0434\u043e\u0431\u043d\u044b\u0445 \u043d\u044e\u0430\u043d\u0441\u043e\u0432 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043e\u0447\u0435\u043d\u044c \u043c\u043d\u043e\u0433\u043e; \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0431\u044b, \u0447\u0442\u043e\u0431\u044b \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0438 \u0431\u044b\u043b\u0438 \u043f\u043e\u043b\u043d\u044b\u043c\u0438, \u043d\u043e \u043e\u0441\u0442\u0430\u0432\u0430\u043b\u0438\u0441\u044c \u043f\u0440\u0435\u0434\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u044b\u043c\u0438 \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f \u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f.<\/p>\n<p>  \u041e\u0447\u0435\u0440\u0442\u0438\u043c \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f \u043a \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0435\u0432:  <\/p>\n<ul>\n<li>\u043d\u0430\u0434\u0435\u0436\u043d\u043e\u0441\u0442\u044c;<\/li>\n<li>\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0441\u0442\u044c \u043d\u0430 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430;<\/li>\n<li>\u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c;<\/li>\n<li>\u043f\u0440\u043e\u0441\u0442\u043e\u0442\u0430;<\/li>\n<li>\u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0438 \u043c\u043e\u0433\u0443\u0442 \u0444\u044d\u0439\u043b\u0438\u0442\u044c\u0441\u044f;<\/li>\n<li>\u0431\u044b\u0441\u0442\u0440\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435;<\/li>\n<li>\u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0438 \u043c\u043e\u0433\u0443\u0442 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0434\u0440\u0443\u0433\u0438\u0435 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0438;<\/li>\n<li>&#8230;<\/li>\n<\/ul>\n<p>  \u0412 \u0438\u0433\u0440\u0435 \u201cThe Amoeba World\u201d \u0431\u044b\u043b \u0437\u0430\u0434\u0438\u0437\u0430\u0439\u043d\u0435\u043d \u044f\u0437\u044b\u043a Scenario DSL, \u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u0435\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440 (\u043a\u043e\u0434). \u0412\u043e\u0442 \u043a\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043a\u0443\u0441\u043e\u043a \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u044f \u0434\u043b\u044f \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 Fabric (\u043a\u043e\u0434):<\/p>\n<blockquote><p><font color=\"#5d478b\">&#8212;&nbsp;Scenario.hs:<\/font><br \/>  createProduct&nbsp;<font color=\"#339933\">::<\/font>&nbsp;Energy&nbsp;<font color=\"#339933\">-&gt;<\/font>&nbsp;Object&nbsp;<font color=\"#339933\">-&gt;<\/font>&nbsp;Eval&nbsp;Object<br \/>  createProduct&nbsp;eCost&nbsp;sch&nbsp;<font color=\"#339933\">=<\/font>&nbsp;<font>do<\/font><br \/>  &nbsp;&nbsp;&nbsp;&nbsp;pl&nbsp;<font color=\"#339933\">&lt;-<\/font>&nbsp;<font>read<\/font>&nbsp;ownership<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;d&nbsp;&nbsp;<font color=\"#339933\">&lt;-<\/font>&nbsp;<font>read<\/font>&nbsp;dislocation<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;withdrawEnergy&nbsp;pl&nbsp;eCost<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;<font>return<\/font>&nbsp;<font color=\"#339933\">$<\/font>&nbsp;adjust&nbsp;sch&nbsp;<font>[<\/font>ownership&nbsp;<font color=\"#339933\">.~<\/font>&nbsp;pl<font color=\"#339933\">,<\/font>&nbsp;dislocation&nbsp;<font color=\"#339933\">.~<\/font>&nbsp;d<font>]<\/font><br \/>  &nbsp;<br \/>  placeProduct&nbsp;prod&nbsp;plAlg&nbsp;<font color=\"#339933\">=<\/font>&nbsp;<font>do<\/font><br \/>  &nbsp;&nbsp;&nbsp;&nbsp;l&nbsp;&nbsp;&nbsp;<font color=\"#339933\">&lt;-<\/font>&nbsp;withDefault&nbsp;ground&nbsp;<font color=\"#339933\">$<\/font>&nbsp;getProperty&nbsp;layer&nbsp;prod<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;obj&nbsp;<font color=\"#339933\">&lt;-<\/font>&nbsp;getActedObject<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;p&nbsp;&nbsp;&nbsp;<font color=\"#339933\">&lt;-<\/font>&nbsp;evaluatePlacementAlg&nbsp;plAlg&nbsp;l&nbsp;obj<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;save&nbsp;<font color=\"#339933\">$<\/font>&nbsp;objectDislocation&nbsp;<font color=\"#339933\">.~<\/font>&nbsp;p&nbsp;<font color=\"#339933\">$<\/font>&nbsp;prod<br \/>  &nbsp;<br \/>  produce&nbsp;f&nbsp;<font color=\"#339933\">=<\/font>&nbsp;<font>do<\/font><br \/>  &nbsp;&nbsp;&nbsp;&nbsp;prodObj&nbsp;<font color=\"#339933\">&lt;-<\/font>&nbsp;createProduct&nbsp;<font>(<\/font>f&nbsp;<font color=\"#339933\">^.<\/font>&nbsp;energyCost<font>)<\/font>&nbsp;<font>(<\/font>f&nbsp;<font color=\"#339933\">^.<\/font>&nbsp;scheme<font>)<\/font><br \/>  &nbsp;&nbsp;&nbsp;&nbsp;placeProduct&nbsp;prodObj&nbsp;<font>(<\/font>f&nbsp;<font color=\"#339933\">^.<\/font>&nbsp;placementAlg<font>)<\/font><br \/>  &nbsp;&nbsp;&nbsp;&nbsp;<font>return<\/font>&nbsp;<font>&quot;Successfully&nbsp;produced.&quot;<\/font><br \/>  &nbsp;<br \/>  producingScenario&nbsp;<font color=\"#339933\">::<\/font>&nbsp;Eval&nbsp;<font color=\"#cccc00\">String<\/font><br \/>  producingScenario&nbsp;<font color=\"#339933\">=<\/font>&nbsp;<font>do<\/font><br \/>  &nbsp;&nbsp;&nbsp;&nbsp;f&nbsp;<font color=\"#339933\">&lt;-<\/font>&nbsp;<font>read<\/font>&nbsp;fabric<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;<font>if<\/font>&nbsp;f&nbsp;<font color=\"#339933\">^.<\/font>&nbsp;producing<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font>then<\/font>&nbsp;produce&nbsp;f<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font>else<\/font>&nbsp;<font>return<\/font>&nbsp;<font>&quot;Producing&nbsp;paused.&quot;<\/font><\/p><\/blockquote>\n<p>  \u0412\u043e \u0432\u0442\u043e\u0440\u043e\u0439 \u0447\u0430\u0441\u0442\u0438, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e \u0432 \u0440\u0430\u0437\u0434\u0435\u043b\u0435 \u2018let-\u0444\u0443\u043d\u043a\u0446\u0438\u0438\u2019, \u043c\u044b \u0432\u0438\u0434\u0435\u043b\u0438 \u043a\u043e\u0434 \u0433\u0440\u043e\u043c\u043e\u0437\u0434\u043a\u0438\u0439 \u0438 \u043d\u0435\u043f\u043e\u043d\u044f\u0442\u043d\u044b\u0439. \u0422\u0435\u043f\u0435\u0440\u044c \u0436\u0435 \u043c\u044b \u0432\u0438\u0434\u0438\u043c \u043a\u043e\u0434 \u043b\u0435\u0433\u043a\u0438\u0439, \u043f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u043d\u0435\u043f\u043e\u043d\u044f\u0442\u043d\u044b\u0439, \u043d\u043e \u0432 \u043d\u0435\u043c \u0443\u0436\u0435 \u043f\u0440\u043e\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430. \u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0432 \u043d\u0435\u0439 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f.<\/p>\n<p>  Scenario DSL \u0434\u0435\u043b\u0438\u0442\u0441\u044f \u043d\u0430 \u0434\u0432\u0435 \u0447\u0430\u0441\u0442\u0438: \u044f\u0437\u044b\u043a \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u043a \u0438\u0433\u0440\u043e\u0432\u044b\u043c \u0434\u0430\u043d\u043d\u044b\u043c \u0438 \u0441\u0440\u0435\u0434\u0430 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f. \u0412 \u043e\u0441\u043d\u043e\u0432\u0435 \u0432\u0441\u0435\u0433\u043e \u043b\u0435\u0436\u0438\u0442 \u0442\u0438\u043f Eval \u2014 \u0441\u0442\u0435\u043a \u0438\u0437 \u043c\u043e\u043d\u0430\u0434 Either \u0438 State:<\/p>\n<blockquote><p><font color=\"#5d478b\">&#8212;&nbsp;Evaluation.hs:<\/font><br \/>  <font>type<\/font>&nbsp;EvalType&nbsp;ctx&nbsp;res&nbsp;<font color=\"#339933\">=<\/font>&nbsp;EitherT&nbsp;EvalError&nbsp;<font>(<\/font>State&nbsp;ctx<font>)<\/font>&nbsp;res<br \/>  <font>type<\/font>&nbsp;Eval&nbsp;res&nbsp;<font color=\"#339933\">=<\/font>&nbsp;EvalType&nbsp;EvaluationContext&nbsp;res<\/p><\/blockquote>\n<p>  \u0412\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u044f\u044f \u043c\u043e\u043d\u0430\u0434\u0430 State \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0438 \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f. \u0422\u0435\u043a\u0443\u0449\u0438\u0439 \u043c\u0438\u0440, \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435, \u0440\u0430\u043d\u0434\u043e\u043c-\u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440, \u2014 \u0432\u0441\u0435 \u044d\u0442\u043e \u043b\u0435\u0436\u0438\u0442 \u0432 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435:<\/p>\n<blockquote><p><font>data<\/font>&nbsp;DataContext&nbsp;<font color=\"#339933\">=<\/font>&nbsp;DataContext&nbsp;<font>{<\/font>&nbsp;dataObjects&nbsp;<font color=\"#339933\">::<\/font>&nbsp;Eval&nbsp;Objects<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#339933\">,<\/font>&nbsp;dataObjectGraph&nbsp;<font color=\"#339933\">::<\/font>&nbsp;Eval&nbsp;<font>(<\/font>NeighboursFunc&nbsp;<font color=\"#339933\">-&gt;<\/font>&nbsp;ObjectGraph<font>)<\/font><br \/>  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#339933\">,<\/font>&nbsp;dataObjectAt&nbsp;<font color=\"#339933\">::<\/font>&nbsp;Point&nbsp;<font color=\"#339933\">-&gt;<\/font>&nbsp;Eval&nbsp;<font>(<\/font><font color=\"#cccc00\">Maybe<\/font>&nbsp;Object<font>)<\/font>&nbsp;<font>}<\/font><br \/>  &nbsp;<br \/>  <font>data<\/font>&nbsp;EvaluationContext&nbsp;<font color=\"#339933\">=<\/font>&nbsp;EvaluationContext&nbsp;<font>{<\/font>&nbsp;ctxData&nbsp;<font color=\"#339933\">::<\/font>&nbsp;DataContext<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#339933\">,<\/font>&nbsp;ctxTransactionMap&nbsp;<font color=\"#339933\">::<\/font>&nbsp;TransactionMap<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#339933\">,<\/font>&nbsp;ctxActedObject&nbsp;<font color=\"#339933\">::<\/font>&nbsp;<font color=\"#cccc00\">Maybe<\/font>&nbsp;Object<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#339933\">,<\/font>&nbsp;ctxNextRndNum&nbsp;<font color=\"#339933\">::<\/font>&nbsp;Eval&nbsp;<font color=\"#cccc00\">Int<\/font>&nbsp;<font>}<\/font><\/p><\/blockquote>\n<p>  \u0412\u043d\u0435\u0448\u043d\u044f\u044f \u043c\u043e\u043d\u0430\u0434\u0430 Either \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u043e\u0448\u0438\u0431\u043a\u0438 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f. \u0421\u0430\u043c\u0430\u044f \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u043d\u0430\u044f \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f \u2014 \u043a\u043e\u0433\u0434\u0430 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u044f\u0442 \u043a\u043e\u043b\u043b\u0438\u0437\u0438\u0438, \u0438 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0439 \u0434\u043e\u043b\u0436\u0435\u043d \u043e\u0431\u043e\u0440\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u0441\u0435\u0440\u0435\u0434\u0438\u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u044b. \u0427\u0442\u043e\u0431\u044b \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0438\u0433\u0440\u044b \u043e\u0441\u0442\u0430\u0432\u0430\u043b\u043e\u0441\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u043c, \u043d\u0443\u0436\u043d\u043e \u043e\u0442\u043a\u0430\u0442\u0438\u0442\u044c \u0432\u0441\u0435 \u0435\u0433\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f, \u0430 \u0435\u0441\u043b\u0438 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0439 \u0431\u044b\u043b \u0432\u044b\u0437\u0432\u0430\u043d \u0438\u0437 \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u044f, \u2014 \u0442\u043e \u0438 \u0442\u0430\u043c \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043a\u0430\u043a-\u0442\u043e \u0440\u0435\u0430\u0433\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u043d\u043e\u0433\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438\u043c\u0435\u044e\u0442 \u0442\u0438\u043f Eval, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u0437\u0430 \u0441\u043e\u0431\u043e\u0439 \u043c\u043e\u043d\u0430\u0434\u0443 Either. \u0424\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438, \u0432\u0441\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0441 \u0442\u0438\u043f\u043e\u043c Eval \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u044f\u043c\u0438. \u0414\u0430\u0436\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440\u0430 (evalTransact, getTransactionObjects) \u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u044f\u0437\u044b\u043a\u0430 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 (single, find) \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0432 \u044d\u0442\u043e\u043c \u0442\u0438\u043f\u0435 \u0438, \u043f\u043e \u0444\u0430\u043a\u0442\u0443, \u0442\u043e\u0436\u0435 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u044f\u043c\u0438. \u0418\u043d\u044b\u043c\u0438 \u0441\u043b\u043e\u0432\u0430\u043c\u0438, \u044f\u0437\u044b\u043a Scenario DSL \u0443\u043d\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d \u0442\u0438\u043f\u043e\u043c Eval, \u0447\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442 \u043a\u043e\u0434 \u043a\u043e\u043d\u0441\u0438\u0441\u0442\u0435\u043d\u0442\u043d\u044b\u043c \u0438 \u043c\u043e\u043d\u0430\u0434\u043d\u043e-\u043a\u043e\u043c\u043f\u043e\u043d\u0443\u044e\u0449\u0438\u043c\u0441\u044f.<\/p>\n<p>  \u0422\u0430\u043a \u043a\u0430\u043a \u043b\u044e\u0431\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0441 \u0442\u0438\u043f\u043e\u043c Eval \u2014 \u044d\u0442\u043e \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0439, \u0442\u043e \u043a\u0430\u0436\u0434\u0443\u044e \u0438\u0437 \u043d\u0438\u0445 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0438 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c. \u0418\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0446\u0438\u044f \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u044f \u2014 \u044d\u0442\u043e \u0432\u0441\u0435\u0433\u043e \u043b\u0438\u0448\u044c \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0441\u0442\u0435\u043a\u0430 \u043c\u043e\u043d\u0430\u0434:<\/p>\n<blockquote><p><font color=\"#5d478b\">&#8212;&nbsp;Evaluation.hs:<\/font><br \/>  evaluate&nbsp;scenario&nbsp;<font color=\"#339933\">=<\/font>&nbsp;evalState&nbsp;<font>(<\/font>runEitherT&nbsp;scenario<font>)<\/font><br \/>  execute&nbsp;scenario&nbsp;<font color=\"#339933\">=<\/font>&nbsp;execState&nbsp;<font>(<\/font>runEitherT&nbsp;scenario<font>)<\/font><br \/>  run&nbsp;scenario&nbsp;<font color=\"#339933\">=<\/font>&nbsp;runState&nbsp;<font>(<\/font>runEitherT&nbsp;scenario<font>)<\/font><\/p><\/blockquote>\n<p>  \u0414\u043b\u044f \u0438\u0433\u0440\u043e\u0432\u044b\u0445 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0435\u0432 \u0435\u0441\u0442\u044c \u043e\u0434\u043d\u0430 \u0442\u043e\u0447\u043a\u0430 \u0432\u0445\u043e\u0434\u0430 \u2014 \u043e\u0431\u043e\u0431\u0449\u0430\u044e\u0449\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f mainScenario:<\/p>\n<blockquote><p><font color=\"#5d478b\">&#8212;&nbsp;Scenario.hs:<\/font><br \/>  mainScenario&nbsp;<font color=\"#339933\">::<\/font>&nbsp;Eval&nbsp;<font>(<\/font><font>)<\/font><br \/>  mainScenario&nbsp;<font color=\"#339933\">=<\/font>&nbsp;<font>do<\/font><br \/>  &nbsp;&nbsp;&nbsp;&nbsp;forProperty&nbsp;fabric&nbsp;producingScenario<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;forProperty&nbsp;moving&nbsp;movingScenario<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;<font>return<\/font>&nbsp;<font>(<\/font><font>)<\/font><br \/>  &nbsp;<br \/>  <font color=\"#5d478b\">&#8212;&nbsp;\u0413\u0434\u0435-\u0442\u043e&nbsp;\u0432&nbsp;\u0433\u043b\u0430\u0432\u043d\u043e\u043c&nbsp;\u043a\u043e\u0434\u0435&nbsp;&#8212;&nbsp;\u043e\u0434\u0438\u043d&nbsp;\u0442\u0438\u043a&nbsp;\u0432\u0441\u0435\u0439&nbsp;\u0438\u0433\u0440\u044b:<\/font><br \/>  stepGame&nbsp;gameContext&nbsp;<font color=\"#339933\">=<\/font>&nbsp;runScenario&nbsp;mainScenario&nbsp;gameContext<\/p><\/blockquote>\n<p>  \u0422\u043e\u0447\u043d\u043e \u0442\u0430\u043a \u0436\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u044e\u0442\u0441\u044f \u0438 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0438, \u0430 \u0437\u043d\u0430\u0447\u0438\u0442, \u043c\u043e\u0436\u043d\u043e \u0432\u0432\u0435\u0441\u0442\u0438 \u043c\u043e\u0434\u0443\u043b\u044c\u043d\u043e\u0435 \u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0435 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043a\u043e\u0434\u0430. \u0412\u043e\u0442, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u044b\u0439 \u043a\u043e\u0434 \u0438\u0437 \u043c\u043e\u0434\u0443\u043b\u044f ScenarioTest.hs, \u2014 \u043f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432 \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u044b\u0439 \u0442\u0435\u0441\u0442 QuickCheck \u0438\u043b\u0438 HUnit:<\/p>\n<blockquote><p>main&nbsp;<font color=\"#339933\">=<\/font>&nbsp;<font>do<\/font><br \/>  &nbsp;&nbsp;&nbsp;&nbsp;<font>let<\/font>&nbsp;ctx&nbsp;<font color=\"#339933\">=<\/font>&nbsp;testContext&nbsp;<font color=\"#339933\">$<\/font>&nbsp;initialGame&nbsp;<font>1<\/font><br \/>  &nbsp;&nbsp;&nbsp;&nbsp;<font>let<\/font>&nbsp;result&nbsp;<font color=\"#339933\">=<\/font>&nbsp;execute&nbsp;<font>(<\/font>placeProduct&nbsp;<font>(<\/font>plasma&nbsp;player1&nbsp;point1<font>)<\/font>&nbsp;nearestEmptyCell<font>)<\/font>&nbsp;ctx<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;<font>print<\/font>&nbsp;result<\/p><\/blockquote>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c, \u043a\u043e\u0433\u0434\u0430 \u043c\u044b \u043f\u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u043b\u0438\u0441\u044c \u0441 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044f\u043c\u0438 \u0441\u0440\u0435\u0434\u044b \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f Scenario DSL, \u043f\u0440\u0435\u043f\u0430\u0440\u0438\u0440\u0443\u0435\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e:<\/p>\n<blockquote><p>withdrawEnergy&nbsp;pl&nbsp;cnt&nbsp;<font color=\"#339933\">=<\/font>&nbsp;<font>do<\/font><br \/>  &nbsp;&nbsp;&nbsp;&nbsp;obj&nbsp;<font color=\"#339933\">&lt;-<\/font>&nbsp;singleActual&nbsp;<font color=\"#339933\">$<\/font>&nbsp;named&nbsp;`is`&nbsp;karyonName&nbsp;<font color=\"#339933\">~<\/font>&amp;<font color=\"#339933\">~<\/font>&nbsp;ownership&nbsp;`is`&nbsp;pl&nbsp;<font color=\"#339933\">~<\/font>&amp;<font color=\"#339933\">~<\/font>&nbsp;batteryCharge&nbsp;`suchThat`&nbsp;<font>(<\/font><font color=\"#339933\">&gt;=<\/font>&nbsp;cnt<font>)<\/font><br \/>  &nbsp;&nbsp;&nbsp;&nbsp;batRes&nbsp;<font color=\"#339933\">&lt;-<\/font>&nbsp;getProperty&nbsp;battery&nbsp;obj<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;save&nbsp;<font color=\"#339933\">$<\/font>&nbsp;batteryCharge&nbsp;<font color=\"#339933\">.~<\/font>&nbsp;modifyResourceStock&nbsp;batRes&nbsp;cnt&nbsp;<font color=\"#339933\">$<\/font>&nbsp;obj<\/p><\/blockquote>\n<p>  \u042d\u0442\u043e \u0442\u043e\u0436\u0435 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0439, \u0441\u043b\u0443\u0436\u0430\u0449\u0438\u0439 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0439 \u0446\u0435\u043b\u0438: \u0434\u043b\u044f \u0438\u0433\u0440\u043e\u043a\u0430 pl \u0438\u0437\u044a\u044f\u0442\u044c \u0438\u0437 \u044f\u0434\u0440\u0430 \u044d\u043d\u0435\u0440\u0433\u0438\u044e \u0432 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0435 cnt. \u0427\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e? \u041f\u0440\u0435\u0436\u0434\u0435 \u0432\u0441\u0435\u0433\u043e, \u043d\u0430\u0439\u0442\u0438 \u043d\u0430 \u043a\u0430\u0440\u0442\u0435 \u043e\u0431\u044a\u0435\u043a\u0442 \u0441 \u0442\u0430\u043a\u0438\u043c\u0438 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430\u043c\u0438: Named == \u201cKaryon\u201d \u0438 Ownership == pl. \u0412 \u043a\u043e\u0434\u0435 \u0432\u044b\u0448\u0435 \u043c\u044b \u0432\u0438\u0434\u0438\u043c \u0432\u044b\u0437\u043e\u0432 singleActual \u2014 \u044d\u0442\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0438\u0449\u0435\u0442 \u0434\u043b\u044f \u043d\u0430\u0441 \u043e\u0431\u044a\u0435\u043a\u0442 \u043f\u043e \u043f\u0440\u0435\u0434\u0438\u043a\u0430\u0442\u0443. \u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u044f\u0437\u044b\u043a\u0443 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0441\u043b\u043e\u0432\u0435\u0441\u043d\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043f\u043e\u0447\u0442\u0438 \u0442\u043e\u0447\u043d\u043e \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u043a\u043e\u0434:<\/p>\n<blockquote><p>named&nbsp;`is`&nbsp;karyonName<br \/>  <font color=\"#339933\">~<\/font>&amp;<font color=\"#339933\">~<\/font>&nbsp;ownership&nbsp;`is`&nbsp;pl<br \/>  <font color=\"#339933\">~<\/font>&amp;<font color=\"#339933\">~<\/font>&nbsp;batteryCharge&nbsp;`suchThat`&nbsp;<font>(<\/font><font color=\"#339933\">&gt;=<\/font>&nbsp;cnt<font>)<\/font><\/p><\/blockquote>\n<p>  \u041d\u0435\u0442\u0440\u0443\u0434\u043d\u043e \u0434\u043e\u0433\u0430\u0434\u0430\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 (~&#038;~) \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u201c\u0418\u201d, \u0430 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 `is` \u0437\u0430\u0434\u0430\u0435\u0442 \u0440\u0430\u0432\u0435\u043d\u0441\u0442\u0432\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044e. \u0422\u0440\u0435\u0442\u044c\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u0435 \u043f\u0440\u0435\u0434\u0438\u043a\u0430\u0442\u0430 \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b, \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0431\u0430\u0442\u0430\u0440\u0435\u044f \u0437\u0430\u0440\u044f\u0436\u0435\u043d\u0430 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u043e\u0442\u0442\u0443\u0434\u0430 \u0438\u0437\u044a\u044f\u0442\u044c \u0435\u0449\u0435 \u044d\u043d\u0435\u0440\u0433\u0438\u0438. \u041a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435, \u044d\u043d\u0435\u0440\u0433\u0438\u044f \u043c\u043e\u0436\u0435\u0442 \u043a\u043e\u043d\u0447\u0438\u0442\u044c\u0441\u044f, \u0438 \u0442\u043e\u0433\u0434\u0430 \u043e\u0431\u044a\u0435\u043a\u0442 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043d\u0430\u0439\u0434\u0435\u043d, \u2014 \u0432 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u043d\u0430\u0447\u043d\u0435\u0442\u0441\u044f fail-\u0432\u0435\u0442\u043a\u0430 \u043c\u043e\u043d\u0430\u0434\u044b Either, \u0438 \u0432\u0435\u0441\u044c \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0439 \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u043c\u0435\u043d\u0435\u043d. \u041d\u043e \u0435\u0441\u043b\u0438 \u044d\u043d\u0435\u0440\u0433\u0438\u044e \u043c\u043e\u0436\u043d\u043e \u0438\u0437\u044a\u044f\u0442\u044c, \u0442\u043e \u0438\u0437\u044b\u043c\u0430\u0435\u043c \u0438 \u043d\u0430\u043a\u0430\u043f\u043b\u0438\u0432\u0430\u0435\u043c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f:<\/p>\n<blockquote><p>save&nbsp;<font color=\"#339933\">$<\/font>&nbsp;batteryCharge&nbsp;<font color=\"#339933\">.~<\/font>&nbsp;modifyResourceStock&nbsp;batRes&nbsp;cnt&nbsp;<font color=\"#339933\">$<\/font>&nbsp;obj<\/p><\/blockquote>\n<p>  \u0421\u0442\u043e\u0438\u0442 \u0443\u043f\u043e\u043c\u044f\u043d\u0443\u0442\u044c, \u0447\u0442\u043e \u0432 Scenario DSL \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u043b\u0438\u043d\u0437\u044b, \u0447\u0442\u043e \u0432\u0435\u0441\u044c\u043c\u0430 \u0441\u043e\u043a\u0440\u0430\u0449\u0430\u0435\u0442 \u043a\u043e\u0434. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432\u043c\u0435\u0441\u0442\u043e \u043b\u0430\u043a\u043e\u043d\u0438\u0447\u043d\u043e\u0433\u043e (batteryCharge .~ 10) \u043d\u0430\u043c \u0431\u044b \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0437\u0430\u043d\u0438\u043c\u0430\u0442\u044c\u0441\u044f \u0430\u0440\u0445\u0435\u043e\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438 \u0440\u0430\u0441\u043a\u043e\u043f\u043a\u0430\u043c\u0438 \u043f\u043e \u0446\u0435\u043f\u043e\u0447\u043a\u0435: Object -&gt; PropertyMap -&gt; PBattery -&gt; Resource -&gt; \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c stock -&gt; \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0432\u0441\u0435 \u043e\u0431\u0440\u0430\u0442\u043d\u043e.<\/p>\n<p>  \u0412 \u044f\u0437\u044b\u043a\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0435\u0441\u0442\u044c \u043c\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439. \u041c\u043e\u0436\u043d\u043e \u0438\u0441\u043a\u0430\u0442\u044c \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u043f\u043e \u043f\u0440\u0435\u0434\u0438\u043a\u0430\u0442\u0443 (\u0444\u0443\u043d\u043a\u0446\u0438\u044f query), \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043a\u0430\u0442\u044c \u043e\u0434\u0438\u043d\u043e\u0447\u043d\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 (\u0444\u0443\u043d\u043a\u0446\u0438\u044f single), \u0430 \u0435\u0441\u043b\u0438 \u0442\u0430\u043a\u043e\u0432\u044b\u0445 \u043d\u0430\u0439\u0434\u0435\u0442\u0441\u044f \u043c\u043d\u043e\u0433\u043e, \u2014 \u0444\u044d\u0439\u043b\u0438\u0442\u044c \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0439. \u0422\u0430\u043a\u0436\u0435 \u0435\u0441\u0442\u044c \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u0438 \u043f\u043e\u0438\u0441\u043a\u0430: \u0438\u0441\u043a\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0442\u0430\u0440\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435, \u0438\u0441\u043a\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u043e\u0432\u044b\u0435, \u0438\u043b\u0438 \u0432\u0441\u0435 \u0432\u043c\u0435\u0441\u0442\u0435, \u2014 \u0438 \u043f\u0443\u0441\u0442\u044c \u043a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u0438\u0439 \u043a\u043e\u0434 \u0441\u0430\u043c \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f. \u0412 \u0446\u0435\u043b\u043e\u043c, Scenario DSL \u0445\u043e\u0440\u043e\u0448\u043e \u0441\u043f\u0440\u0430\u0432\u043b\u044f\u043b\u0441\u044f \u0441\u043e \u0441\u0432\u043e\u0435\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439, \u0438 \u0431\u044b\u043b\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043f\u043e \u0435\u0433\u043e \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044e. \u0418 \u0431\u044b\u043b\u0430 \u043b\u0438\u0448\u044c \u043e\u0434\u043d\u0430 \u0441\u0435\u0440\u044c\u0435\u0437\u043d\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0441\u043d\u043e\u0432\u0430 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u043f\u0435\u0440\u0435\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043e\u0441\u043d\u043e\u0432\u0443 \u043e\u0441\u043d\u043e\u0432 \u2014 \u0434\u0438\u0437\u0430\u0439\u043d \u0442\u0438\u043f\u0430 Object. \u0418\u043c\u044f \u044d\u0442\u043e\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0435\u2026<\/p>\n<p>  <strong>\u0410\u043d\u0442\u0438\u043f\u0430\u0442\u0442\u0435\u0440\u043d Lens + NoMonomorphismRestriction<\/strong><\/p>\n<p>  \u041f\u0440\u0438\u0447\u0438\u043d\u0430 \u0432\u0441\u0435\u0445 \u0431\u0435\u0434 \u043b\u0435\u0436\u0438\u0442 \u0432 \u0442\u0438\u043f\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 PropertyMap \u0438 \u0432 \u043b\u0438\u043d\u0437\u0430\u0445 \u0434\u043b\u044f \u0441\u0432\u043e\u0439\u0441\u0442\u0432:<\/p>\n<blockquote><p>property&nbsp;k&nbsp;l&nbsp;<font color=\"#339933\">=<\/font>&nbsp;propertyMap&nbsp;<font color=\"#339933\">.<\/font>&nbsp;at&nbsp;k&nbsp;<font color=\"#339933\">.<\/font>&nbsp;traverse&nbsp;<font color=\"#339933\">.<\/font>&nbsp;l<br \/>  &nbsp;<br \/>  named&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#339933\">=<\/font>&nbsp;property&nbsp;<font>(<\/font>key&nbsp;namedA<font>)<\/font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#339933\">_<\/font>named<br \/>  durability&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#339933\">=<\/font>&nbsp;property&nbsp;<font>(<\/font>key&nbsp;durabilityA<font>)<\/font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#339933\">_<\/font>durability<br \/>  battery&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#339933\">=<\/font>&nbsp;property&nbsp;<font>(<\/font>key&nbsp;batteryA<font>)<\/font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#339933\">_<\/font>battery<br \/>  <font color=\"#339933\">&#8230;<\/font><\/p><\/blockquote>\n<p>  \u0424\u0443\u043d\u043a\u0446\u0438\u044f property \u0432\u043e \u0432\u0441\u0435\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0440\u0430\u0437\u043d\u044b\u0435 \u043b\u0438\u043d\u0437\u044b, \u0447\u0442\u043e \u043d\u0435\u043b\u044c\u0437\u044f \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043f\u0440\u0438 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u043e\u0439 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0435 \u043c\u043e\u043d\u043e\u043c\u043e\u0440\u0444\u0438\u0437\u043c\u0430. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u044f\u0437\u044b\u043a\u0430 NoMonomorphismRestriction. \u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u0438\u0437-\u0437\u0430 \u044d\u0442\u043e\u0433\u043e \u0432\u044b\u0432\u043e\u0434 \u0442\u0438\u043f\u043e\u0432 \u0441\u0442\u0430\u043b \u043b\u043e\u043c\u0430\u0442\u044c\u0441\u044f \u0432 \u0441\u0430\u043c\u044b\u0445 \u043d\u0435\u043e\u0436\u0438\u0434\u0430\u043d\u043d\u044b\u0445 \u043c\u0435\u0441\u0442\u0430\u0445, \u0438 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u043b\u043e\u0441\u044c \u0438\u0441\u043a\u0430\u0442\u044c \u043e\u0431\u0445\u043e\u0434\u043d\u044b\u0435 \u043f\u0443\u0442\u0438. \u0425\u0443\u0436\u0435 \u0442\u043e\u0433\u043e: \u0440\u0435\u0436\u0438\u043c NoMonomorphismRestriction \u043d\u0430\u0447\u0430\u043b \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u044f\u0442\u044c\u0441\u044f \u043f\u043e \u043a\u043e\u0434\u0443. \u041e\u043d \u043f\u043e\u044f\u0432\u043b\u044f\u043b\u0441\u044f \u0432\u0435\u0437\u0434\u0435, \u0433\u0434\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438\u0441\u044c \u043b\u0438\u043d\u0437\u044b \u043c\u043e\u0434\u0443\u043b\u044f Object.hs, \u0438 \u0437\u0430\u0440\u0430\u0436\u0430\u043b \u0431\u0435\u0437\u0443\u043c\u0438\u0435\u043c \u0442\u0430\u0439\u043f\u0447\u0435\u043a\u0435\u0440. \u0412 \u043a\u043e\u043d\u0446\u0435 \u043a\u043e\u043d\u0446\u043e\u0432, \u0434\u0438\u0437\u0430\u0439\u043d Scenario DSL \u0441\u0442\u0430\u043b \u043f\u0440\u043e\u0433\u0438\u0431\u0430\u0442\u044c\u0441\u044f \u043f\u043e\u0434 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f\u043c\u0438 \u0442\u0430\u0439\u043f\u0447\u0435\u043a\u0435\u0440\u0430, \u2014 \u0447\u0442\u043e \u043f\u0440\u0438\u0432\u0435\u043b\u043e \u043a \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0445\u043e\u0440\u043e\u0448\u0438\u043c \u0440\u0435\u0448\u0435\u043d\u0438\u044f\u043c.<\/p>\n<p>  \u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u0442\u044c, \u043e\u0442\u043a\u0430\u0437\u0430\u0432\u0448\u0438\u0441\u044c \u043e\u0442 \u0442\u0438\u043f\u0430 PropertyMap. \u0422\u043e\u0433\u0434\u0430 \u0432 \u0442\u0438\u043f\u0435 Object \u043e\u043a\u0430\u0436\u0443\u0442\u0441\u044f \u0432\u0441\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430, \u2014 \u0434\u0430\u0436\u0435 \u0442\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u043c\u0443 \u043e\u0431\u044a\u0435\u043a\u0442\u0443 \u043d\u0435 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u044f\u0442\u0441\u044f. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0435\u0441\u0442\u044c \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f, \u043d\u043e \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u0434\u0438\u0437\u0430\u0439\u043d\u0430 \u0431\u044b\u043b\u043e \u0441\u0434\u0435\u043b\u0430\u043d\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u0430\u043a:<\/p>\n<blockquote><p><font>data<\/font>&nbsp;Object&nbsp;<font color=\"#339933\">=<\/font>&nbsp;Object&nbsp;<font>{<\/font><br \/>  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#5d478b\">&#8212;&nbsp;Properties:<\/font><br \/>  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;objectId&nbsp;<font color=\"#339933\">::<\/font>&nbsp;ObjectId&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#5d478b\">&#8212;&nbsp;static&nbsp;property<\/font><br \/>  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#339933\">,<\/font>&nbsp;objectType&nbsp;<font color=\"#339933\">::<\/font>&nbsp;ObjectType&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#5d478b\">&#8212;&nbsp;predefined&nbsp;property<\/font><br \/>  &nbsp;<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#5d478b\">&#8212;&nbsp;Runtime&nbsp;properties,&nbsp;resources:<\/font><br \/>  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#339933\">,<\/font>&nbsp;ownership&nbsp;<font color=\"#339933\">::<\/font>&nbsp;Player&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#5d478b\">&#8212;&nbsp;runtime&nbsp;property&#8230;&nbsp;or&nbsp;can&nbsp;be&nbsp;effect!<\/font><br \/>  &nbsp;<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#339933\">,<\/font>&nbsp;lifebound&nbsp;&nbsp;<font color=\"#339933\">::<\/font>&nbsp;IntResource&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#5d478b\">&#8212;&nbsp;runtime&nbsp;property<\/font><br \/>  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#339933\">,<\/font>&nbsp;durability&nbsp;<font color=\"#339933\">::<\/font>&nbsp;IntResource&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#5d478b\">&#8212;&nbsp;runtime&nbsp;property<\/font><br \/>  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#339933\">,<\/font>&nbsp;energy&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#339933\">::<\/font>&nbsp;IntResource&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#5d478b\">&#8212;&nbsp;runtime&nbsp;property<\/font><br \/>  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font>}<\/font><\/p><\/blockquote>\n<p>  \u041d\u0435\u0442 \u0445\u0443\u0434\u0430 \u0431\u0435\u0437 \u0434\u043e\u0431\u0440\u0430, \u2014 \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043f\u0435\u0440\u0435\u0441\u043c\u043e\u0442\u0440\u0430 \u0434\u0440\u0443\u0433\u0438\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u043f\u0440\u0435\u0432\u0440\u0430\u0442\u0438\u043b\u0438\u0441\u044c \u0432\u043e \u0432\u043d\u0435\u0448\u043d\u0438\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u044b \u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f. \u0414\u0438\u0437\u0430\u0439\u043d \u0441\u0442\u0430\u043b \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u043c, \u0445\u043e\u0442\u044f \u0438 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0432\u044b\u0431\u0440\u043e\u0441\u0438\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u043d\u0430\u0440\u0430\u0431\u043e\u0442\u043e\u043a \u043f\u043e Scenario DSL\u2026<\/p>\n<h5>\u0412\u043c\u0435\u0441\u0442\u043e \u0437\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f<\/h5>\n<p>  \u041d\u043e\u0432\u044b\u0439 \u0434\u0432\u0438\u0436\u043e\u043a \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0435\u0432, \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u043e, \u0431\u0443\u0434\u0435\u0442 \u043e\u0441\u043d\u043e\u0432\u0430\u043d \u0443\u0436\u0435 \u043d\u0430 \u0438\u043d\u044b\u0445 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0430\u0445. \u0412 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438, \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0435 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0439 DSL, \u0430 \u0432\u043d\u0435\u0448\u043d\u0438\u0439, \u2014 \u0442\u043e\u0433\u0434\u0430 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0438 \u043c\u043e\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u0438\u0441\u0430\u0442\u044c \u0432 \u043e\u0431\u044b\u0447\u043d\u044b\u0445 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0445 \u0444\u0430\u0439\u043b\u0430\u0445. \u041d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0430\u0432\u0442\u043e\u0440 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0430\u0434 \u0441\u043b\u043e\u044f\u043c\u0438 Application \u0438 View, \u043d\u0430\u0434 \u043f\u043e\u0438\u0441\u043a\u043e\u043c \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f FRP. \u0412 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0433\u043b\u0430\u0432\u0430\u0445 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u043d\u043e \u043e \u0442\u043e\u043c, \u043a\u0430\u043a\u0430\u044f \u0438\u0434\u0435\u044f \u0441\u0442\u043e\u0438\u0442 \u0437\u0430 FRP, \u0438 \u043a\u0430\u043a \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0440\u0435\u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0435\u0434\u0438\u043d\u0438\u0442\u044c \u0440\u0430\u0437\u0440\u043e\u0437\u043d\u0435\u043d\u043d\u044b\u0435 \u0447\u0430\u0441\u0442\u0438 \u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f.<\/p>\n<h5>\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 Inversion of Control \u0432 Haskell<\/h5>\n<p>  <i>Disclaimer: \u0430\u0432\u0442\u043e\u0440 \u043d\u0435 \u0443\u0441\u043f\u0435\u043b \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u0442\u044c \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u043b\u044f \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u0434\u0435\u043b\u0430. \u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0435\u043d\u0438\u0435 \u0431\u0443\u0434\u0435\u0442 \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0441\u0442\u0430\u0442\u044c\u044f\u0445.<\/i><\/p>\n<p>  <strong>\u041c\u043e\u043d\u0430\u0434\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0438\u043d\u044a\u0435\u043a\u0446\u0438\u044f \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f (Monadic state injection)<\/strong><\/p>\n<p>  <b>\u0427\u0435\u043c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f<\/b>: \u0418\u043d\u044a\u0435\u043a\u0446\u0438\u044f \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 (Dependency Injection).<br \/>  <b>\u0414\u043b\u044f \u0447\u0435\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f<\/b>: \u0414\u043b\u044f \u0430\u0431\u0441\u0442\u0440\u0430\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0432\u043d\u0435\u0448\u043d\u0438\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435\u043c \u0432 \u043a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u043e\u043c \u043a\u043e\u0434\u0435.<br \/>  <b>\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435<\/b>: \u0412\u043d\u0435\u0448\u043d\u0435\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0432\u043d\u0435\u0434\u0440\u044f\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u043c\u043e\u043d\u0430\u0434\u0443 State \u043a\u0430\u043a \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442. \u041a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u0438\u0439 \u043a\u043e\u0434 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u0432 \u043c\u043e\u043d\u0430\u0434\u0435 State \u0441 \u044d\u0442\u0438\u043c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043e\u043c. \u041f\u0440\u0438 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0438 \u043a \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0443 \u043a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u0438\u0439 \u043a\u043e\u0434 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 \u0432\u043d\u0435\u0448\u043d\u0435\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f.<br \/>  <b>\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430<\/b>:  <\/p>\n<blockquote><p>\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c \u0442\u0438\u043f \u0434\u0430\u043d\u043d\u044b\u0445 Context \u2014 \u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0432\u043d\u0435\u0448\u043d\u0435\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0432 \u0432\u0438\u0434\u0435 \u043c\u043e\u043d\u0430\u0434\u044b State:<\/p>\n<blockquote><p><font>data<\/font>&nbsp;Context&nbsp;<font color=\"#339933\">=<\/font>&nbsp;Context&nbsp;<font>{<\/font>&nbsp;ctxNextId&nbsp;<font color=\"#339933\">::<\/font>&nbsp;State&nbsp;Context&nbsp;<font color=\"#cccc00\">Int<\/font>&nbsp;<font>}<\/font><\/p><\/blockquote>\n<p>  \u041e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0435 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u044b \u0432\u043d\u0435\u0434\u0440\u044f\u0435\u043c\u043e\u0433\u043e \u043a\u043e\u0434\u0430. \u041a\u043e\u0434 \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0434\u0430\u0432\u0430\u0442\u044c \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u043d\u044b\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442:<\/p>\n<blockquote><p>constantId&nbsp;<font color=\"#339933\">::<\/font>&nbsp;State&nbsp;Context&nbsp;<font color=\"#cccc00\">Int<\/font><br \/>  constantId&nbsp;<font color=\"#339933\">=<\/font>&nbsp;<font>return<\/font>&nbsp;<font>42<\/font><\/p><\/blockquote>\n<p>  \u0418\u043b\u0438 \u0436\u0435 \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0434\u0430\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u043d\u044b\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u0432\u044b\u0437\u043e\u0432:<\/p>\n<blockquote><p>nextId&nbsp;<font color=\"#339933\">::<\/font>&nbsp;<font color=\"#cccc00\">Int<\/font>&nbsp;<font color=\"#339933\">-&gt;<\/font>&nbsp;State&nbsp;Context&nbsp;<font color=\"#cccc00\">Int<\/font><br \/>  nextId&nbsp;prevId&nbsp;<font color=\"#339933\">=<\/font>&nbsp;<font>do<\/font>&nbsp;<font>let<\/font>&nbsp;nId&nbsp;<font color=\"#339933\">=<\/font>&nbsp;prevId&nbsp;<font color=\"#339933\">+<\/font>&nbsp;<font>1<\/font><br \/>  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;modify&nbsp;<font>(<\/font>\\ctx&nbsp;<font color=\"#339933\">-&gt;<\/font>&nbsp;ctx&nbsp;<font>{<\/font>&nbsp;ctxNextId&nbsp;<font color=\"#339933\">=<\/font>&nbsp;nextId&nbsp;nId&nbsp;<font>}<\/font><font>)<\/font><br \/>  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font>return<\/font>&nbsp;nId<\/p><\/blockquote>\n<p>  \u0421\u043e\u0437\u0434\u0430\u0435\u043c \u043a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u0438\u0439 \u043a\u043e\u0434 \u0432 \u043c\u043e\u043d\u0430\u0434\u0435 State:<\/p>\n<blockquote><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;client&nbsp;<font color=\"#339933\">=<\/font>&nbsp;<font>do<\/font><br \/>  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;externalId&nbsp;<font color=\"#339933\">&lt;-<\/font>&nbsp;get&nbsp;<font color=\"#339933\">&gt;&gt;=<\/font>&nbsp;ctxNextId<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;doStuff&nbsp;externalId<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font>return<\/font>&nbsp;externalId<\/p><\/blockquote>\n<p>  \u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u0438\u0439 \u043a\u043e\u0434, \u0432\u043d\u0435\u0434\u0440\u044f\u044f \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0439 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u0432\u043d\u0435\u0448\u043d\u0435\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f:<\/p>\n<blockquote><p><font>print<\/font>&nbsp;<font color=\"#339933\">$<\/font>&nbsp;evalState&nbsp;client&nbsp;<font>(<\/font>Context&nbsp;constantId<font>)<\/font><br \/>  <font>print<\/font>&nbsp;<font color=\"#339933\">$<\/font>&nbsp;evalState&nbsp;client&nbsp;<font>(<\/font>Context&nbsp;<font>(<\/font>nextId&nbsp;<font>0<\/font><font>)<\/font><font>)<\/font><\/p><\/blockquote>\n<p>  <b>\u041f\u043e\u043b\u043d\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440<\/b>: <a href=\"https:\/\/gist.github.com\/graninas\/b4d62dffe6e95a2721a0\">gist<\/a><br \/>  <b>\u0412\u044b\u0432\u043e\u0434 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b-\u043f\u0440\u0438\u043c\u0435\u0440\u0430<\/b>:<br \/>  Sequental ids:  <\/p>\n<blockquote><p><font>[<\/font><font>(<\/font><font>1<\/font><font color=\"#339933\">,<\/font><font>&quot;GNVOERK&quot;<\/font><font>)<\/font><font color=\"#339933\">,<\/font><font>(<\/font><font>2<\/font><font color=\"#339933\">,<\/font><font>&quot;RIKTIG&nbsp;YOGLA&quot;<\/font><font>)<\/font><font>]<\/font><br \/>  Random&nbsp;ids:<br \/>  <font>[<\/font><font>(<\/font><font>59<\/font><font color=\"#339933\">,<\/font><font>&quot;GNVOERK&quot;<\/font><font>)<\/font><font color=\"#339933\">,<\/font><font>(<\/font><font>64<\/font><font color=\"#339933\">,<\/font><font>&quot;RIKTIG&nbsp;YOGLA&quot;<\/font><font>)<\/font><font>]<\/font><\/p><\/blockquote>\n<\/blockquote>\n<p>  <strong>\u041c\u043e\u0434\u0443\u043b\u044c\u043d\u0430\u044f \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u044f (Module Abstraction)<\/strong><\/p>\n<p>  <b>\u0427\u0435\u043c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f<\/b>: \u0427\u0435\u0440\u043d\u044b\u0439 \u044f\u0449\u0438\u043a.<br \/>  <b>\u0414\u043b\u044f \u0447\u0435\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f<\/b>: \u0412\u044b\u0431\u0438\u0440\u0430\u0442\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u0432 \u0440\u0430\u043d\u0442\u0430\u0439\u043c\u0435.<br \/>  <b>\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435<\/b>: \u0415\u0441\u0442\u044c \u043c\u043e\u0434\u0443\u043b\u044c-\u0444\u0430\u0441\u0430\u0434, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u044b \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u043e\u0434\u0443\u043b\u0435\u0439, \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0449\u0438\u0445 \u043e\u0434\u043d\u0443 \u0438 \u0442\u0443 \u0436\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u044e. \u041f\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u043c\u0443 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0443 \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438-\u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u0435\u043b\u0435 \u0444\u0430\u0441\u0430\u0434\u043d\u043e\u0433\u043e \u043c\u043e\u0434\u0443\u043b\u044f \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u0442\u0430 \u0438\u043b\u0438 \u0438\u043d\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f. \u0412 \u043a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u043e\u043c \u043a\u043e\u0434\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0444\u0430\u0441\u0430\u0434\u043d\u044b\u0439 \u043c\u043e\u0434\u0443\u043b\u044c, \u0438 \u0447\u0435\u0440\u0435\u0437 \u0444\u0443\u043d\u043a\u0446\u0438\u044e-\u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u0435\u043b\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043d\u0443\u0436\u043d\u044b\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c.<br \/>  <b>\u041f\u043e\u043b\u043d\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440<\/b>: <a href=\"https:\/\/gist.github.com\/graninas\/e93e32aa1950a6f7b040\">gist<\/a>    \t<\/p>\n<div class=\"clear\"><\/div>\n<\/p><\/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\/222015\/\"> http:\/\/habrahabr.ru\/post\/222015\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div class=\"content html_format\">   \t<strong>\u0421\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0438 \u0437\u0430\u043a\u043e\u043d\u044b. \u0421\u0446\u0435\u043d\u0430\u0440\u0438\u0438. Inversion of Control \u0432 Haskell.<\/strong><\/p>\n<h5>\u0421\u043e\u0432\u0441\u0435\u043c \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0442\u0435\u043e\u0440\u0438\u0438<\/h5>\n<p>  \u0412 <a href=\"http:\/\/habrahabr.ru\/post\/215161\/\">\u043f\u0440\u043e\u0448\u043b\u043e\u0439<\/a> \u0447\u0430\u0441\u0442\u0438 \u043c\u044b \u0443\u0431\u0435\u0434\u0438\u043b\u0438\u0441\u044c, \u0447\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u043b\u0435\u0433\u043a\u043e \u0437\u0430\u043f\u0443\u0442\u0430\u0442\u044c\u0441\u044f \u0432 \u043f\u043b\u043e\u0445\u043e \u0441\u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u043c \u043a\u043e\u0434\u0435. \u041a \u0441\u0447\u0430\u0441\u0442\u044c\u044e, \u0441 \u0434\u0440\u0435\u0432\u043d\u0438\u0445 \u0432\u0440\u0435\u043c\u0435\u043d \u043d\u0430\u043c \u0438\u0437\u0432\u0435\u0441\u0442\u0435\u043d \u043f\u0440\u0438\u043d\u0446\u0438\u043f \u201c\u0440\u0430\u0437\u0434\u0435\u043b\u044f\u0439 \u0438 \u0432\u043b\u0430\u0441\u0442\u0432\u0443\u0439\u201d, \u2014 \u043e\u043d \u0448\u0438\u0440\u043e\u043a\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0438 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b \u0438 \u0434\u0438\u0437\u0430\u0439\u043d\u0430 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0441\u0438\u0441\u0442\u0435\u043c. \u041c\u044b \u0437\u043d\u0430\u0435\u043c \u0440\u0430\u0437\u043d\u044b\u0435 \u0432\u043e\u043f\u043b\u043e\u0449\u0435\u043d\u0438\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0430, \u043a\u0430\u043a-\u0442\u043e: \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043d\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b, \u0443\u043c\u0435\u043d\u044c\u0448\u0435\u043d\u0438\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043c\u0435\u0436\u0434\u0443 \u043c\u043e\u0434\u0443\u043b\u044f\u043c\u0438, \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u044b \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f, \u0430\u0431\u0441\u0442\u0440\u0430\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043e\u0442 \u0434\u0435\u0442\u0430\u043b\u0435\u0439, \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u044f\u0437\u044b\u043a\u043e\u0432. \u042d\u0442\u043e \u0445\u043e\u0440\u043e\u0448\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0434\u043b\u044f \u0438\u043c\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u0445 \u044f\u0437\u044b\u043a\u043e\u0432, \u0438 \u043d\u0430\u0434\u043e \u043f\u043e\u043b\u0430\u0433\u0430\u0442\u044c, \u0447\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0445, \u0437\u0430 \u0442\u0435\u043c \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c, \u0447\u0442\u043e \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0431\u0443\u0434\u0443\u0442 \u0434\u0440\u0443\u0433\u0438\u043c\u0438. \u041a\u0430\u043a\u0438\u043c\u0438 \u0436\u0435?  <\/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-222015","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/222015","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=222015"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/222015\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=222015"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=222015"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=222015"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}