{"id":212955,"date":"2014-02-18T10:39:03","date_gmt":"2014-02-18T06:39:03","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=212955"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=212955","title":{"rendered":"<span class=\"post_title\">\u0417\u0430\u0447\u0435\u043c \u043d\u0443\u0436\u043d\u044b \u0432\u0441\u0435 \u044d\u0442\u0438 \u0444\u0443\u043d\u0442\u043a\u043e\u0440\u044b \u0438 \u043c\u043e\u043d\u0430\u0434\u044b?<\/span>"},"content":{"rendered":"<div class=\"content html_format\">   \t\u041e\u0447\u0435\u043d\u044c \u0447\u0430\u0441\u0442\u043e \u0432 \u0441\u0442\u0430\u0442\u044c\u044f\u0445 \u043f\u0440\u043e \u0425\u0430\u0441\u043a\u0435\u043b\u044c \u0441\u043f\u043b\u043e\u0448\u044c \u0438 \u0440\u044f\u0434\u043e\u043c \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u044e\u0442\u0441\u044f \u0444\u0443\u043d\u043a\u0442\u043e\u0440\u044b \u0438 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u043c\u043e\u043d\u0430\u0434\u044b.<br \/>  \u0422\u0430\u043a \u0447\u0430\u0441\u0442\u043e, \u0447\u0442\u043e \u043f\u043e\u0440\u043e\u0439 \u043d\u0435 \u0440\u0435\u0436\u0435 \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u044e\u0442\u0441\u044f \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438 \u00ab\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u043d\u043e\u0432\u044b\u0435 \u043c\u043e\u043d\u0430\u0434\u044b\u00bb \u0438 \u00ab\u043f\u0438\u0448\u0438\u0442\u0435 \u043e \u0447\u0451\u043c-\u043b\u0438\u0431\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u043c\u00bb.<br \/>  \u041d\u0430 \u043c\u043e\u0439 \u0432\u0437\u0433\u043b\u044f\u0434 \u044d\u0442\u043e \u0441\u0432\u0438\u0434\u0435\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u0443\u0435\u0442 \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u043b\u044e\u0434\u0438 \u043f\u043e\u0440\u043e\u0439 \u043d\u0435 \u043f\u043e\u043d\u0438\u043c\u0430\u044e\u0442 \u0437\u0430\u0447\u0435\u043c \u0436\u0435 \u043d\u0443\u0436\u043d\u044b \u0432\u0441\u0435 \u044d\u0442\u0438 \u0444\u0443\u043d\u043a\u0442\u043e\u0440\u044b \u0438 \u043c\u043e\u043d\u0430\u0434\u044b.<\/p>\n<p>  \u042d\u0442\u043e \u0441\u0442\u0430\u0442\u044c\u044f \u043f\u043e\u043f\u044b\u0442\u043a\u0430 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e \u0441\u0438\u043b\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0445 \u044f\u0437\u044b\u043a\u043e\u0432 \u0438 \u0432 \u043f\u0435\u0440\u0432\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0425\u0430\u0441\u043a\u0435\u043b\u044f \u2014 \u044d\u0442\u043e \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0438 \u0441\u0438\u043b\u0435 \u0444\u0443\u043d\u043a\u0442\u043e\u0440\u043e\u0432 \u0438 \u043c\u043e\u043d\u0430\u0434.<br \/>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/665\/815\/3a8\/6658153a81883ae24da9bc4fdfe5714e.png\"\/><br \/>  <a name=\"habracut\"><\/a>  <\/p>\n<h4>\u0427\u0438\u0441\u0442\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435<\/h4>\n<p>  \u041f\u043e\u043f\u044b\u0442\u0430\u044e\u0441\u044c \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u044d\u0442\u043e \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0438\u0441\u043a\u0443\u0441\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u043c \u0438 \u043d\u0430\u0432\u0435\u0440\u043d\u044f\u043a\u0430 \u0431\u0435\u0441\u043f\u043e\u043b\u0435\u0437\u043d\u043e\u043c, \u043e\u0434\u043d\u0430\u043a\u043e \u0430\u043a\u0446\u0435\u043d\u0442 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u043d\u0430 \u0432\u0430\u0436\u043d\u043e\u0441\u0442\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043e\u0431\u0449\u0435\u0433\u043e \u043a\u043e\u0434\u0430 \u0438 \u043f\u0435\u0440\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f.<\/p>\n<p>  \u0422\u0435\u0440\u043c\u0438\u043d \u00ab\u0447\u0438\u0441\u0442\u044b\u0439\u00bb \u043f\u0435\u0440\u0435\u043d\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043e \u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438. <br \/>  \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0444\u0440\u0430\u0437\u0443 \u00ab\u0420\u0443\u0431\u0438 \u2014 \u0447\u0438\u0441\u0442\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u043d\u044b\u0439 \u044f\u0437\u044b\u043a\u00bb \u043c\u044b \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u043c \u043a\u0430\u043a \u00ab\u0420\u0443\u0431\u0438 \u2014 \u044f\u0437\u044b\u043a, \u0433\u0434\u0435 \u0432\u0441\u0451 \u2014 \u043e\u0431\u044a\u0435\u043a\u0442\u044b\u00bb.<br \/>  \u0410 \u0432\u043e\u0442 \u0444\u0440\u0430\u0437\u0443 \u00ab\u0425\u0430\u0441\u043a\u0435\u043b\u044c \u2014 \u044d\u0442\u043e \u0447\u0438\u0441\u0442\u044b\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u044f\u0437\u044b\u043a\u00bb \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c \u043a\u0430\u043a \u00ab\u0425\u0430\u0441\u043a\u0435\u043b\u044c \u2014 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u044f\u0437\u044b\u043a \u0431\u0435\u0437 \u043f\u043e\u0431\u043e\u0447\u043d\u044b\u0445 \u044d\u0444\u0444\u0435\u043a\u0442\u043e\u0432\u00bb.<br \/>  \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u0435\u0440\u043c\u0438\u043d \u00ab\u0447\u0438\u0441\u0442\u044b\u0439\u00bb \u0435\u0449\u0451 \u0432 \u043e\u0434\u043d\u043e\u043c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435.<br \/>  \u00ab\u0427\u0438\u0441\u0442\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435\u00bb \u2014 \u044d\u0442\u043e \u0434\u0430\u043d\u043d\u044b\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u044f \u0445\u043e\u0447\u0443 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c. <br \/>  \u0412 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043d\u044b\u0435 \u0442\u0438\u043f\u044b \u2014 \u044d\u0442\u043e \u0447\u0438\u0441\u043b\u0430, \u0441\u0442\u0440\u043e\u043a\u0438, \u0438\u043d\u043e\u0433\u0434\u0430 \u0431\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u044b\u0435, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u2014 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430 \u0438\u043b\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439.<br \/>  \u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u00ab\u0433\u0440\u044f\u0437\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435\u00bb \u2014 \u044d\u0442\u043e \u0434\u0430\u043d\u043d\u044b\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442, \u043f\u043e\u043c\u0438\u043c\u043e \u0442\u043e\u0433\u043e \u0447\u0442\u043e \u044f \u0445\u043e\u0447\u0443, \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e.<\/p>\n<p>  \u0412\u043e\u0442 \u0441\u043e\u0447\u0438\u043d\u044f\u0435\u043c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043a\u0443:  <\/p>\n<pre><code class=\"haskell\">module Main where  foo = undefined  main :: IO () main = do     putStrLn &quot;Input a: &quot;     a &lt;- getLine \tputStrLn &quot;Input b: &quot; \tb &lt;- getLine \tprint (foo a b) <\/code><\/pre>\n<p>  \u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u043f\u0440\u043e\u0441\u0442\u0430 \u0434\u043e \u0431\u0435\u0437\u043e\u0431\u0440\u0430\u0437\u0438\u044f \u2014 \u043c\u044b \u043f\u0440\u043e\u0441\u0438\u043c \u0432\u0432\u0435\u0441\u0442\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e 2 \u0441\u0442\u0440\u043e\u0447\u043a\u0438, \u0430 \u043f\u043e\u0441\u043b\u0435 \u0432\u044b\u0432\u043e\u0434\u0438\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f.<br \/>  \u0412\u0438\u0434\u0438\u043c, \u0447\u0442\u043e \u043d\u0430\u0448\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f foo \u0435\u0449\u0451 \u043d\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0430 (\u043e\u043d\u0430 \u0432\u0441\u0435\u0433\u0434\u0430 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u043f\u0430\u0434\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b), \u0445\u043e\u0442\u044f \u0425\u0430\u0441\u043a\u0435\u043b\u044c \u0443\u0436\u0435 \u043c\u043e\u0436\u0435\u0442 \u043e\u0442\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430\u0448 \u043a\u043e\u0434.<\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u0435\u0440\u0435\u043f\u0438\u0448\u0435\u043c \u0431\u043e\u043b\u0435\u0435 \u0434\u0435\u0442\u0430\u043b\u044c\u043d\u043e \u043d\u0430\u0448\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u00ab\u0447\u0438\u0441\u0442\u044b\u0435\u00bb \u0434\u0430\u043d\u043d\u044b\u0435:  <\/p>\n<pre><code class=\"haskell\">baz :: Int -&gt; Int -&gt; Int baz = (+)  baz1 :: Int -&gt; Int baz1 = (+ 1)  bar :: Int -&gt; Int -&gt; Int bar = div  foo :: String -&gt; String -&gt; Int foo a b = bar a''' b''     where \t  a' :: Int \t  a' = read a \t   \t  b' :: Int \t  b' = read b \t   \t  b'' :: Int \t  b'' = baz1 b' \t   \t  a'' :: Int \t  a'' = baz a' b'' \t   \t  a''' :: Int \t  a''' = bar a' a'' <\/code><\/pre>\n<p>  \u041a\u0430\u043a \u0432\u0438\u0434\u0438\u043c, \u0442\u0443\u0442 \u0442\u043e\u0436\u0435 \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u0444\u0443\u043d\u043a\u0446\u0438\u044e <code>foo<\/code> \u043c\u044b \u0432\u044b\u0440\u0430\u0436\u0430\u0435\u043c \u0447\u0435\u0440\u0435\u0437 \u0444\u0443\u043d\u043a\u0446\u0438\u044e <code>bar<\/code>, \u0430 \u0435\u0451 \u043c\u044b \u0432\u0437\u044f\u043b\u0438 \u043a\u0430\u043a \u043e\u0431\u044b\u0447\u043d\u043e\u0435 \u0446\u0435\u043b\u043e\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u043e\u0435 \u0434\u0435\u043b\u0435\u043d\u0438\u0435.<br \/>  \u0411\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0445 \u044f\u0437\u044b\u043a\u043e\u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u043b\u0435\u0433\u043a\u043e \u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043d\u0430 \u0447\u0438\u0441\u0442\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<p>  \u041a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u0431\u044b \u0432\u0441\u0451 \u0437\u0430\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u2014 \u043f\u0440\u043e\u0441\u0442\u0430\u044f \u0438 \u044d\u043b\u0435\u0433\u0430\u043d\u0442\u043d\u0430\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043a\u0430. \u041d\u043e \u043d\u0435\u0442\u0443\u0448\u043a\u0438!<br \/>  \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043d\u0430\u043c\u043d\u043e\u0433\u043e \u0441\u043b\u043e\u0436\u043d\u0435\u0435, \u0447\u0435\u043c \u043d\u0430\u043c \u0442\u043e\u0433\u043e \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0431\u044b.<br \/>  \u041a\u0430\u043a \u043c\u044b \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u043c, \u043d\u0430 <code>0<\/code> \u0434\u0435\u043b\u0438\u0442\u044c \u043d\u0435\u043b\u044c\u0437\u044f, \u0434\u0430 \u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043c\u043e\u0436\u0435\u0442 \u0432\u0432\u0435\u0441\u0442\u0438 \u043d\u0435 \u0447\u0438\u0441\u043b\u0430, \u0430 \u043b\u0435\u0432\u044b\u0435 \u0441\u0442\u0440\u043e\u043a\u0438. \u041d\u0430\u0448 \u043a\u043e\u0434 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0441\u044f \u043d\u0435\u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u044b\u043c.<br \/>  \u0418\u043c\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u043a \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0445 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0434\u0435\u043b\u0438\u0442\u0441\u044f \u043d\u0430 2 \u0433\u0440\u0443\u043f\u043f\u044b: \u0438\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u0435\u0442\u0432\u043b\u0435\u043d\u0438\u044f, \u0438\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f. \u0417\u0430\u0447\u0430\u0441\u0442\u0443\u044e \u043e\u0431\u0430 \u043f\u043e\u0434\u0445\u043e\u0434\u0430 \u043a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u0443\u0435\u0442\u0441\u044f.<br \/>  \u042d\u0442\u0438 \u043f\u043e\u0434\u0445\u043e\u0434\u044b \u043d\u0430\u0441\u0442\u043e\u043b\u044c\u043a\u043e \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u044b, \u0447\u0442\u043e \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0438 \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0445 \u044f\u0437\u044b\u043a\u0430\u0445.<br \/>  \u0421\u043a\u0430\u0436\u0435\u043c \u043f\u0440\u044f\u043c\u043e \u2014 \u0432 \u0425\u0430\u0441\u043a\u0435\u043b\u0435 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f, \u043e\u0434\u043d\u0430\u043a\u043e \u043e\u043d\u0438 \u043d\u0435\u0434\u043e\u0440\u0430\u0437\u0432\u0438\u0442\u044b, \u043d\u0443\u0436\u0434\u0430\u044e\u0442\u0441\u044f \u0432 \u0440\u0435\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438, \u043d\u0435 \u043b\u0443\u0447\u0448\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043e\u0442\u043b\u0430\u0432\u043b\u0438\u0432\u0430\u044e\u0442\u0441\u044f. \u0414\u0430 \u0438 \u0441\u0430\u043c\u043e\u0435 \u0432\u0430\u0436\u043d\u043e\u0435 \u2014 \u0432 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0435 \u0441\u043b\u0443\u0447\u0430\u0435\u0432 \u043e\u043d\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435 \u043d\u0443\u0436\u043d\u044b.<br \/>  \u041d\u043e \u043d\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435 \u2014 \u043c\u043e\u0436\u043d\u043e.<br \/>  \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u043f\u044b\u0442\u0430\u0435\u043c\u0441\u044f \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0430\u0448 \u043a\u043e\u0434 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0432\u0435\u0442\u0432\u043b\u0435\u043d\u0438\u044f \u0438 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f.   <\/p>\n<pre><code class=\"haskell\">module Main where  import Control.Exception (IOException, catch)  printError :: IOException -&gt; IO () printError = print   baz :: Int -&gt; Int -&gt; Int baz = (+)  baz1 :: Int -&gt; Int baz1 = (+ 1)  bar :: Int -&gt; Int -&gt; Int bar a b = if b == 0  \t\t  then error &quot;Error 'bar' : wrong 2nd argument = 0&quot;  --unsafe \t\t  else div a b  foo :: String -&gt; String -&gt; Int foo a b = bar a''' b''     where \t   \t  a' :: Int \t  a' = read a   --unsafe \t   \t  b' :: Int \t  b' = read b   --unsafe \t   \t  b'' :: Int \t  b'' = baz1 b' \t   \t  a'' :: Int \t  a'' = baz a' b'' \t   \t  a''' :: Int \t  a''' = bar a' a''  main :: IO () main = do     putStrLn &quot;Input a: &quot;     a &lt;- getLine \tputStrLn &quot;Input b: &quot; \tb &lt;- getLine \tcatch (print (foo a b)) printError <\/code><\/pre>\n<p>  <\/p>\n<h4>\u0413\u0440\u044f\u0437\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435<\/h4>\n<p>  \u0412 \u0425\u0430\u0441\u043a\u0435\u043b\u0435 (\u0434\u0430 \u0438 \u043c\u043d\u043e\u0433\u0438\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0445 \u044f\u0437\u044b\u043a\u0430\u0445) \u0435\u0441\u0442\u044c \u0434\u043e\u0441\u0442\u043e\u0439\u043d\u044b\u0439 \u043e\u0442\u0432\u0435\u0442 \u043d\u0430 \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0435 \u0437\u0430\u0434\u0430\u0447\u0438. <br \/>  \u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0441\u0438\u043b\u0430 \u0437\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0430 \u0432 \u0410\u043b\u0433\u0435\u0431\u0440\u0430\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0422\u0438\u043f\u0430\u0445 \u0414\u0430\u043d\u043d\u044b\u0445.<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u043c\u044b \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u043c \u0432\u044b\u0448\u0435\u043f\u0440\u0438\u0432\u0435\u0434\u0451\u043d\u043d\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440, \u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u043d\u0430\u0448\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043c\u043e\u0433\u0443\u0442 \u043f\u0430\u0434\u0430\u0442\u044c.<br \/>  \u0420\u0435\u0448\u0435\u043d\u0438\u0435 \u2014 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0443\u043b\u0430\u0431\u0435\u043b\u044c\u043d\u044b\u043c\u0438 \u0442\u0438\u043f\u0430\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u0445. <br \/>  \u0412 ML \u044f\u0437\u044b\u043a\u0430\u0445 \u0438 Scala \u0442\u0430\u043a\u043e\u0439 \u0442\u0438\u043f \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f <code>Option<\/code>, \u0432 \u0425\u0430\u0441\u043a\u0435\u043b\u0435 \u043e\u043d \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f <code>Maybe a<\/code>.  <\/p>\n<pre><code class=\"haskell\">import Prelude hiding (Maybe) -- \u044d\u0442\u043e\u0442 \u0442\u0438\u043f \u0443\u0436\u0435 \u043e\u043f\u0438\u0441\u0430\u043d \u0432 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435. \u041c\u044b \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0435\u0433\u043e \u0441 \u043d\u0443\u043b\u044f  data Maybe a = Nothing | Just a                       deriving Show <\/code><\/pre>\n<p>  \u041c\u044b \u043d\u0435 \u043e\u0431\u0440\u0430\u0449\u0430\u0435\u043c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 <code>deriving<\/code> \u0447\u0430\u0441\u0442\u044c, \u043c\u044b \u0442\u0443\u0442 \u043f\u0440\u043e\u0441\u0442\u043e \u0433\u043e\u0432\u043e\u0440\u0438\u043c, \u0447\u0442\u043e \u043f\u0440\u043e\u0441\u0438\u043c \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e \u0443\u043c\u0435\u0442\u044c \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0438\u0442\u044c \u0432 \u0441\u0442\u0440\u043e\u043a\u0443 \u043d\u0430\u0448 \u0442\u0438\u043f \u0434\u0430\u043d\u043d\u044b\u0445.<br \/>  \u0410 \u0438\u043c\u0435\u043d\u043d\u043e,   <\/p>\n<pre><code class=\"haskell\">show Nothing  == &quot;Nothing&quot; show (Just 3) == &quot;Just 3&quot; <\/code><\/pre>\n<p>  \u0422\u0438\u043f \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <code>Nothing<\/code> \u0435\u0441\u043b\u0438 \u0443 \u043d\u0430\u0441 \u043d\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0445, \u0438 <code>Just a<\/code>, \u0435\u0441\u043b\u0438 \u0435\u0441\u0442\u044c.<br \/>  \u041a\u0430\u043a \u0432\u0438\u0434\u0438\u043c, \u0442\u0438\u043f \u0434\u0430\u043d\u043d\u044b\u0445 \u2014 \u00ab\u0433\u0440\u044f\u0437\u043d\u044b\u0439\u00bb, \u0442\u0430\u043a \u043a\u0430\u043a \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043b\u0438\u0448\u043d\u044e\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e.<br \/>  \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u0435\u0440\u0435\u043f\u0438\u0448\u0435\u043c \u043d\u0430\u0448\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e, \u0431\u043e\u043b\u0435\u0435 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e \u0438 \u0431\u0435\u0437 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0439.<\/p>\n<p>  \u041f\u0440\u0435\u0436\u0434\u0435 \u0432\u0441\u0435\u0433\u043e \u0437\u0430\u043c\u0435\u043d\u0438\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u043b\u0438 \u043f\u0430\u0434\u0435\u043d\u0438\u0435 \u043d\u0430 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u044b\u0435 \u0430\u043d\u0430\u043b\u043e\u0433\u0438:  <\/p>\n<pre><code class=\"haskell\">bar :: Int -&gt; Int -&gt; Maybe Int bar a b = if b == 0  \t\t  then Nothing         --safe \t\t  else Just (div a b) \t\t    ...\t\t   \t  a' :: Maybe Int \t  a' = readMaybe a      --safe \t   \t  b' :: Maybe Int \t  b' = readMaybe b      --safe <\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u044d\u0442\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0432\u043c\u0435\u0441\u0442\u043e \u043f\u0430\u0434\u0435\u043d\u0438\u044f \u0434\u0430\u044e\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 <code>Nothing<\/code>, \u0435\u0441\u043b\u0438 \u0432\u0441\u0451 \u0432 \u043f\u043e\u0440\u044f\u0434\u043a\u0435 \u2014 \u0442\u043e <code>Just \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442<\/code>.<\/p>\n<p>  \u041d\u043e \u0432\u0435\u0441\u044c \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0439 \u043a\u043e\u0434 \u0443 \u043d\u0430\u0441 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u044d\u0442\u0438\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439. \u041d\u0430\u043c \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043f\u043e\u0447\u0442\u0438 \u0432\u0441\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0438 \u0442\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043d\u043e\u0433\u043e \u0440\u0430\u0437 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043b\u0438\u0441\u044c.   <\/p>\n<pre><code class=\"haskell\">baz :: Int -&gt; Int -&gt; Int baz = (+)  safeBaz :: Maybe Int -&gt; Maybe Int -&gt; Maybe Int safebaz a b = case a of \t\t\tNothing -&gt; Nothing \t\t\tJust a' -&gt; case b of \t\t\t\tNothing -&gt; Nothing \t\t\t\tJust b' -&gt; Just (baz a' b')  baz1 :: Int -&gt; Int baz1 = (+ 1)  safeBaz1 :: Maybe Int -&gt; Maybe Int safeBaz1 a = case a of \t\t\tNothing -&gt; Nothing \t\t\tJust a' -&gt; Just (baz1 a')  bar :: Int -&gt; Int -&gt; Maybe Int bar a b = if b == 0  \t\t  then Nothing  \t\t  else Just (div a b)  foo :: String -&gt; String -&gt; Maybe Int foo a b = case a''' of \t\t\tNothing -&gt; Nothing \t\t\tJust a3  -&gt; case b'' of \t\t\t\tNothing -&gt; Nothing \t\t\t\tJust b2  -&gt; bar a3 b2     where \t   \t  a' :: Maybe Int \t  a' = readMaybe a \t   \t  b' :: Maybe Int \t  b' = readMaybe b \t   \t  b'' :: Maybe Int \t  b'' = safeBaz1 b' \t   \t  a'' :: Maybe Int \t  a'' = safeBaz a' b'' \t   \t  a''' = case a' of \t\t\tNothing -&gt; Nothing \t\t\tJust a1  -&gt; case a'' of \t\t\t\tNothing -&gt; Nothing \t\t\t\tJust a2  -&gt; bar a1 a2  printMaybe :: Show a =&gt; Maybe a -&gt; IO () printMaybe Nothing  = print &quot;Something Wrong&quot; printMaybe (Just a) = print a  main :: IO () main = do     putStrLn &quot;Input a: &quot;     a &lt;- getLine \tputStrLn &quot;Input b: &quot; \tb &lt;- getLine \tprintMaybe (foo a b)\t <\/code><\/pre>\n<p>  \u041a\u0430\u043a \u0432\u0438\u0434\u0438\u043c \u043f\u0440\u043e\u0441\u0442\u0430\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u043f\u0440\u0435\u0432\u0440\u0430\u0442\u0438\u043b\u0430\u0441\u044c \u0432 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043c\u043e\u043d\u0441\u0442\u0440\u043e-\u043e\u0431\u0440\u0430\u0437\u043d\u044b\u0439 \u043a\u043e\u0434. <br \/>  \u041c\u043d\u043e\u0433\u043e \u043e\u0431\u0451\u0440\u0442\u043e\u0447\u043d\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u043c\u043d\u043e\u0433\u043e \u0438\u0437\u0431\u044b\u0442\u043e\u0447\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430, \u043c\u043d\u043e\u0433\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u043e.<br \/>  \u041d\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u043d\u0430 \u044d\u0442\u043e\u043c \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u043c\u043d\u043e\u0433\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0435 \u044f\u0437\u044b\u043a\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f.<br \/>  \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043d\u044f\u0442\u044c \u043f\u043e\u0447\u0435\u043c\u0443 \u0432 \u0442\u0435\u0445 \u044f\u0437\u044b\u043a\u0430\u0445, \u043d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 \u0410\u0422\u0414, \u0410\u0422\u0414 \u043d\u0435 \u0442\u0430\u043a \u0443\u0436 \u0447\u0430\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0432 \u043a\u043e\u0434\u0435.<\/p>\n<p>  \u041c\u043e\u0436\u043d\u043e \u0436\u0438\u0442\u044c \u0441 \u0410\u0422\u0414, \u043d\u043e \u0431\u0435\u0437 \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0439 \u0432\u0430\u043a\u0445\u0430\u043d\u0430\u043b\u0438\u0438? \u041e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043c\u043e\u0436\u043d\u043e.<\/p>\n<h4>\u0424\u0443\u043d\u043a\u0442\u043e\u0440\u044b<\/h4>\n<p>  \u041d\u0430 \u043f\u043e\u043c\u043e\u0449\u044c \u043d\u0430\u043c \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 \u043f\u0440\u0438\u0445\u043e\u0434\u044f\u0442 \u0444\u0443\u043d\u043a\u0442\u043e\u0440\u044b.<\/p>\n<p>  \u0424\u0443\u043d\u043a\u0442\u043e\u0440\u044b \u2014 \u044d\u0442\u043e \u0442\u0430\u043a\u0438\u0435 \u0442\u0438\u043f\u044b \u0434\u0430\u043d\u043d\u044b\u0445, \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u044f <code>fmap<\/code>  <\/p>\n<pre><code class=\"haskell\">class Functor f where     fmap :: (a -&gt; b) -&gt; f a -&gt; f b <\/code><\/pre>\n<p>  \u0430 \u0442\u0430\u043a \u0436\u0435 \u0435\u0433\u043e \u0438\u043d\u0444\u0438\u043a\u0441\u043d\u044b\u0439 \u0441\u0438\u043d\u043e\u043d\u0438\u043c:  <\/p>\n<pre><code class=\"haskell\">(&lt;$&gt;) :: Functor f =&gt; (a -&gt; b) -&gt; f a -&gt; f b (&lt;$&gt;) = fmap <\/code><\/pre>\n<p>  \u0442\u0430\u043a\u0430\u044f \u0447\u0442\u043e \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0442\u0438\u043f\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432\u0441\u0435\u0433\u0434\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u044f:<\/p>\n<p>  \u0423\u0441\u043b\u043e\u0432\u0438\u0435 \u0438\u0434\u0435\u043d\u0442\u0438\u0447\u043d\u043e\u0441\u0442\u0438:<br \/>  <code> fmap id  ==  id<\/code><br \/>  \u0423\u0441\u043b\u043e\u0432\u0438\u0435 \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0438:<br \/>  <code> fmap (f . g)  ==  fmap f . fmap g<\/code><\/p>\n<p>  \u0413\u0434\u0435 <code>id<\/code> \u2014 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0438\u0434\u0435\u043d\u0442\u0438\u0447\u043d\u043e\u0441\u0442\u0438  <\/p>\n<pre><code class=\"haskell\"> id :: a -&gt; a  id x = x <\/code><\/pre>\n<p>  \u0418 <code>(.)<\/code> \u2014 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u0430\u044f \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u044f  <\/p>\n<pre><code class=\"haskell\"> (.) :: (b -&gt; c) -&gt; (a -&gt; b) -&gt; a -&gt; c  f . g = \\x -&gt; f (g x) <\/code><\/pre>\n<p>  \u0424\u0443\u043d\u043a\u0442\u043e\u0440 \u2014 \u044d\u0442\u043e \u043a\u043b\u0430\u0441\u0441 \u0442\u0438\u043f\u043e\u0432, \u0433\u0434\u0435 \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u043b\u0438 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e fmap. \u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u0435\u0451 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b \u2014 \u043e\u043d\u0430 \u0431\u0435\u0440\u0451\u0442 \u043e\u0434\u043d\u0443 \u00ab\u0447\u0438\u0441\u0442\u0443\u044e\u00bb \u0444\u0443\u043d\u043a\u0446\u0438\u044e <code>a -&gt; b<\/code>, \u0431\u0435\u0440\u0451\u043c \u00ab\u0433\u0440\u044f\u0437\u043d\u043e\u0435\u00bb \u0444\u0443\u043d\u043a\u0442\u043e\u0440\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <code>f a<\/code> \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 \u0444\u0443\u043d\u043a\u0442\u043e\u0440\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <code>f b<\/code>.<\/p>\n<p>  \u0422\u0438\u043f \u0434\u0430\u043d\u043d\u044b\u0445 <code>Maybe<\/code> \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0444\u0443\u043d\u043a\u0442\u043e\u0440\u043e\u043c. \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0438\u043d\u0441\u0442\u0430\u043d\u0441 (\u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440) \u0434\u043b\u044f \u0442\u0438\u043f\u0430 <code>Maybe<\/code>, \u0442\u0430\u043a \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u043d\u0430\u0440\u0443\u0448\u0430\u043b\u0438\u0441\u044c \u0437\u0430\u043a\u043e\u043d\u044b \u0444\u0443\u043d\u043a\u0442\u043e\u0440\u043e\u0432:  <\/p>\n<pre><code class=\"haskell\">instance Functor Maybe where    fmap _ Nothing  = Nothing    fmap f (Just a) = Just (f a) <\/code><\/pre>\n<p>  \u041a\u0430\u043a \u043d\u0430\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0447\u0438\u0441\u0442\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0441 \u0444\u0443\u043d\u043a\u0442\u043e\u0440\u043e\u043c <code>Maybe<\/code>? \u041e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442\u043e:  <\/p>\n<pre><code class=\"haskell\">safeBaz1 :: Maybe Int -&gt; Maybe Int safeBaz1 = fmap baz1 <\/code><\/pre>\n<p>  \u041c\u044b \u0442\u0443\u0442 \u0432\u0438\u0434\u0438\u043c \u0433\u043b\u0430\u0432\u043d\u043e\u0435 \u2014 \u043c\u044b \u043d\u0435 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u043b\u0438 \u043d\u0430\u0448\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u044e <code>baz<\/code>, \u0430 \u0437\u043d\u0430\u0447\u0438\u0442 \u043d\u0430\u043c \u043d\u0435 \u043d\u0430\u0434\u043e \u0435\u0451 \u0435\u0449\u0451 \u0440\u0430\u0437 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430 \u0431\u0430\u0433\u0438 \u0438 \u043a\u043e \u0432\u0441\u0435\u043c\u0443 \u043e\u043d\u0430 \u043e\u0441\u0442\u0430\u043b\u0430\u0441\u044c \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u043e\u0439 \u0438 \u0447\u0438\u0441\u0442\u043e\u0439, \u0437\u0430\u0442\u043e \u043c\u044b \u0441 \u043b\u0451\u0433\u043a\u043e\u0441\u0442\u044c\u044e \u0441\u043e\u0437\u0434\u0430\u043b\u0438 \u0435\u0451 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043d\u0430 \u0432\u0445\u043e\u0434 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u043d\u0435 \u0447\u0438\u0441\u043b\u0430, \u0430 \u043d\u0443\u043b\u0430\u0431\u0435\u043b\u044c\u043d\u044b\u0435 \u0447\u0438\u0441\u043b\u0430.<\/p>\n<p>  \u041e\u0434\u043d\u0430\u043a\u043e, \u0435\u0441\u043b\u0438 \u043c\u044b \u0437\u0430\u0445\u043e\u0442\u0438\u043c \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u0444\u0443\u043d\u043a\u0442\u043e\u0440, \u043f\u044b\u0442\u0430\u044f\u0441\u044c \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u0442\u044c <code>safeBaz<\/code>, \u043c\u044b \u043f\u043e\u0442\u0435\u0440\u043f\u0438\u043c \u0444\u0438\u0430\u0441\u043a\u043e.<br \/>  \u0424\u0443\u043d\u043a\u0442\u043e\u0440\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0441 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c\u0438 \u0441 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c \u0444\u0443\u043d\u043a\u0442\u043e\u0440\u043d\u043e-\u00ab\u0433\u0440\u044f\u0437\u043d\u044b\u043c\u00bb \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u043c.<br \/>  \u0427\u0442\u043e \u0436\u0435 \u0434\u0435\u043b\u0430\u0442\u044c \u0434\u043b\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0441 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438?<\/p>\n<h4>\u0410\u043f\u043f\u043b\u0438\u043a\u0430\u0442\u0438\u0432\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0442\u043e\u0440\u044b<\/h4>\n<p>  \u0422\u0443\u0442 \u043d\u0430\u043c \u043d\u0430 \u043f\u043e\u043c\u043e\u0449\u044c \u043f\u0440\u0438\u0445\u043e\u0434\u044f\u0442 \u0430\u043f\u043f\u043b\u0438\u043a\u0430\u0442\u0438\u0432\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0442\u043e\u0440\u044b:<\/p>\n<p>  \u0410\u043f\u043f\u043b\u0438\u043a\u0430\u0442\u0438\u0432\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0442\u043e\u0440\u044b \u2014 \u0442\u0430\u043a\u0438\u0435 \u0444\u0443\u043d\u043a\u0442\u043e\u0440\u044b, \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u044b 2 \u0444\u0443\u043d\u043a\u0446\u0438\u0438: <code>pure<\/code> \u0438 <code>(&lt;*&gt;)<\/code>  <\/p>\n<pre><code class=\"haskell\">class Functor f =&gt; Applicative f where     pure  :: a -&gt; f a \t(&lt;*&gt;) :: f (a -&gt; b) -&gt; f a -&gt; f b <\/code><\/pre>\n<p>  \u0422\u0430\u043a\u0438\u0435, \u0447\u0442\u043e \u0434\u043b\u044f \u043d\u0438\u0445 \u0434\u043b\u044f \u043b\u044e\u0431\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u043e\u0434\u043d\u043e\u0433\u043e \u0442\u0438\u043f\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432\u0441\u0435\u0433\u0434\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u0430:<\/p>\n<p>  \u0423\u0441\u043b\u043e\u0432\u0438\u0435 \u0438\u0434\u0435\u043d\u0442\u0438\u0447\u043d\u043e\u0441\u0442\u0438:<br \/>  <code> pure id &lt;*&gt; v == v<\/code><br \/>  \u0423\u0441\u043b\u043e\u0432\u0438\u0435 \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0438:<br \/>  <code> pure (.) &lt;*&gt; u &lt;*&gt; v &lt;*&gt; w == u &lt;*&gt; (v &lt;*&gt; w)<\/code><br \/>  \u0423\u0441\u043b\u043e\u0432\u0438\u0435 \u0433\u043e\u043c\u043e\u043c\u043e\u0440\u0444\u0438\u0437\u043c\u0430:<br \/>  <code> pure f &lt;*&gt; pure x == pure (f x)<\/code><br \/>  \u0423\u0441\u043b\u043e\u0432\u0438\u0435 \u043e\u0431\u043c\u0435\u043d\u0430:<br \/>  <code> u &lt;*&gt; pure y == pure ($ y) &lt;*&gt; u<\/code><\/p>\n<p>  \u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0435 \u043e\u0442\u043b\u0438\u0447\u0435\u043d\u0438\u0435 \u0444\u0443\u043d\u0442\u043e\u0440\u0430 \u043e\u0442 \u0430\u043f\u043f\u043b\u0438\u043a\u0430\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u0444\u0443\u043d\u0442\u043e\u0440\u0430 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0444\u0443\u043d\u0442\u043e\u0440 \u043f\u0440\u043e\u0442\u0430\u0441\u043a\u0438\u0432\u0430\u0435\u0442 \u0441\u043a\u0432\u043e\u0437\u044c \u0444\u0443\u043d\u043a\u0442\u043e\u0440\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0447\u0438\u0441\u0442\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u0432 \u0442\u043e \u0432\u0440\u0435\u043c\u044f \u043a\u0430\u043a \u0430\u043f\u043f\u043b\u0438\u043a\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u0444\u0443\u043a\u043d\u0442\u043e\u0440 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043d\u0430\u043c \u043f\u0440\u043e\u0442\u0430\u0441\u043a\u0438\u0432\u0430\u0442\u044c \u0441\u043a\u0432\u043e\u0437\u044c \u0444\u0443\u043d\u043a\u0442\u043e\u0440\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0444\u0443\u043d\u043a\u0442\u043e\u0440\u043d\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e <code>f (a -&gt; b)<\/code>.<\/p>\n<p>  Maybe \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0430\u043f\u043f\u043b\u0438\u043a\u0430\u0442\u0438\u0432\u043d\u044b\u043c \u0444\u0443\u043d\u043a\u0442\u043e\u0440\u043e\u043c \u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:  <\/p>\n<pre><code class=\"haskell\">instance Applicative Maybe where     pure = Just \t \tNothing  &lt;*&gt; _        = Nothing \t_        &lt;*&gt; Nothing  = Nothing \t(Just f) &lt;*&gt; (Just a) = Just (f a) <\/code><\/pre>\n<p>  \u0421\u0430\u043c\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u0442\u044c <code>safeBaz<\/code>.<br \/>  \u0412 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442, \u0441\u043e\u0432\u043c\u0435\u0449\u0430\u044f \u0444\u0443\u043d\u043a\u0442\u043e\u0440\u044b\u0439 <code>fmap<\/code> \u0434\u043b\u044f \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430, \u0438 \u0430\u043f\u043f\u043b\u0438\u043a\u0430\u0442\u0438\u0432\u043d\u043e\u0435 \u043d\u0430\u043d\u0438\u0437\u044b\u0432\u0430\u043d\u0438\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432:  <\/p>\n<pre><code class=\"haskell\">safeBaz :: Maybe Int -&gt; Maybe Int -&gt; Maybe Int safebaz a b = baz &lt;$&gt; a &lt;*&gt; b <\/code><\/pre>\n<p>  \u041d\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u043f\u043e\u043b\u044c\u0437\u0443\u044f\u0441\u044c \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0430\u043f\u043f\u043b\u0438\u043a\u0430\u0442\u0438\u0432\u043d\u044b\u043c\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c\u0438 (\u043c\u043e\u043d\u0430\u0434\u043d\u044b\u0439 \u0441\u0442\u0438\u043b\u044c) \u2014 \u0432\u043d\u0430\u0447\u0430\u043b\u0435 \u00ab\u0447\u0438\u0441\u0442\u0443\u044e\u00bb \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0434\u0435\u043b\u0430\u0435\u043c \u0447\u0438\u0441\u0442\u043e-\u0430\u043f\u043f\u043b\u0438\u043a\u0430\u0442\u0438\u0432\u043d\u043e\u0439, \u0438 \u0430\u043f\u043f\u043b\u0438\u043a\u0430\u0442\u0438\u0432\u043d\u043e \u043d\u0430\u043d\u0438\u0437\u044b\u0432\u0430\u0435\u043c \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b:  <\/p>\n<pre><code class=\"haskell\">safeBaz :: Maybe Int -&gt; Maybe Int -&gt; Maybe Int safebaz a b = (pure baz) &lt;*&gt; a &lt;*&gt; b <\/code><\/pre>\n<p>  \u0417\u0430\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e!<br \/>  \u041c\u043e\u0436\u0435\u0442 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043e\u0434\u043d\u043e \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044e <code>a'''<\/code>\u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0430\u043f\u043f\u043b\u0438\u043a\u0430\u0442\u0438\u0432\u043d\u044b\u0445 \u0444\u0443\u043d\u043a\u0442\u043e\u0440\u043e\u0432? \u0423\u0432\u044b.<\/p>\n<h4>\u041c\u043e\u043d\u0430\u0434\u044b<\/h4>\n<p>  \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043e\u0431\u0440\u0430\u0442\u0438\u043c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u043f\u043e\u0434\u043f\u0438\u0441\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <code>bar<\/code>:<br \/>  <code>bar :: Int -&gt; Int -&gt; Maybe Int<\/code><br \/>  \u0424\u0443\u043d\u043a\u0446\u0438\u044f \u0431\u0435\u0440\u0451\u0442 \u043d\u0430 \u0432\u0445\u043e\u0434 \u00ab\u0447\u0438\u0441\u0442\u044b\u0435\u00bb \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b, \u0438 \u0432\u044b\u0434\u0430\u0451\u0442 \u043d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 \u00ab\u0433\u0440\u044f\u0437\u043d\u044b\u0439\u00bb \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442.<br \/>  \u0422\u0430\u043a \u0432\u043e\u0442, \u0432 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0435 \u0441\u0432\u043e\u0451\u043c \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438, \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u0430\u043a\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u044e\u0442\u0441\u044f \u0447\u0430\u0449\u0435 \u0432\u0441\u0435\u0433\u043e \u2014 \u0431\u0435\u0440\u0443\u0442 \u043d\u0430 \u0432\u0445\u043e\u0434 \u00ab\u0447\u0438\u0441\u0442\u044b\u0435\u00bb \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b, \u0438 \u043d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 \u2014 \u00ab\u0433\u0440\u044f\u0437\u043d\u044b\u0439\u00bb \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442.<br \/>  \u0418 \u043a\u043e\u0433\u0434\u0430 \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0442\u0430\u043a\u0438\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u0432\u043c\u0435\u0441\u0442\u0435 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0438\u0445 \u043f\u043e\u043c\u043e\u0433\u0430\u044e\u0442 \u043c\u043e\u043d\u0430\u0434\u044b.<\/p>\n<p>  \u041c\u043e\u043d\u0430\u0434\u044b \u2014 \u044d\u0442\u043e \u0442\u0430\u043a\u0438\u0435 \u0442\u0438\u043f\u044b \u0434\u0430\u043d\u043d\u044b\u0445, \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <code>return<\/code> \u0438 <code>(&gt;&gt;=)<\/code>  <\/p>\n<pre><code class=\"haskell\">class Monad m where \treturn :: a -&gt; m a     (&gt;&gt;=) :: m a -&gt; (a -&gt; m b) -&gt; m b <\/code><\/pre>\n<p>  \u0442\u0430\u043a\u0438\u0435, \u0447\u0442\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0434\u043b\u044f \u043b\u044e\u0431\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0442\u0438\u043f\u0430:<\/p>\n<p>  \u041b\u0435\u0432\u043e\u0439 \u0438\u0434\u0435\u043d\u0442\u0438\u0447\u043d\u043e\u0441\u0442\u0438:<br \/>  <code> return a &gt;&gt;= k  ==  k a<\/code><br \/>  \u041f\u0440\u0430\u0432\u043e\u0439 \u0438\u0434\u0435\u043d\u0442\u0438\u0447\u043d\u043e\u0441\u0442\u0438:<br \/>  <code> m &gt;&gt;= return  ==  m<\/code><br \/>  \u0410\u0441\u0441\u043e\u0446\u0438\u0430\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0438:<br \/>  <code> m &gt;&gt;= (\\x -&gt; k x &gt;&gt;= h)  ==  (m &gt;&gt;= k) &gt;&gt;= h<\/code><\/p>\n<p>  \u0414\u043b\u044f \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430, \u0435\u0441\u0442\u044c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0441 \u043e\u0431\u0440\u0430\u0442\u043d\u044b\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u043e\u043c \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432:  <\/p>\n<pre><code class=\"haskell\">(=&lt;&lt;) :: Monad m =&gt; (a -&gt; m b) -&gt; m a -&gt; m b (=&lt;&lt;) = flip (&gt;&gt;=) <\/code><\/pre>\n<p>  \u0413\u0434\u0435   <\/p>\n<pre><code class=\"haskell\">flip :: (a -&gt; b -&gt; c) -&gt; b -&gt; a -&gt; c flip f a b = f b a <\/code><\/pre>\n<p>  \u041c\u044b \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u043c, \u0447\u0442\u043e \u0442\u0438\u043f <code>Maybe<\/code> \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043c\u043e\u043d\u0430\u0434\u043e\u0439, \u0430 \u0437\u043d\u0430\u0447\u0438\u0442 \u043c\u043e\u0436\u043d\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0435\u0433\u043e \u0438\u043d\u0441\u0442\u0430\u043d\u0441 (\u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440):  <\/p>\n<pre><code class=\"haskell\">instance  Monad Maybe  where     return              = Just \t     (Just x) &gt;&gt;= k      = k x     Nothing  &gt;&gt;= _      = Nothing <\/code><\/pre>\n<p>  \u041a\u0441\u0442\u0430\u0442\u0438, \u0435\u0441\u043b\u0438 \u043c\u044b \u043f\u0440\u0438\u0441\u043c\u043e\u0442\u0440\u0438\u043c\u0441\u044f \u0432\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u0435\u0435 \u043a \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u043c\u0443 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u044e, \u0438 \u043f\u043e\u0434\u043f\u0438\u0441\u044f\u043c, \u0443\u0432\u0438\u0434\u0438\u043c, \u0447\u0442\u043e:<br \/>  <code>pure == return<\/code><br \/>  <code>fmap f xs  ==  xs &gt;&gt;= return . f<\/code><\/p>\n<p>  \u041f\u0440\u0438\u0448\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044e <code>a'''<\/code>  <\/p>\n<pre><code class=\"haskell\"> a''' = a' &gt;&gt;= (\\a1 -&gt; a'' &gt;&gt;= (bar a1)) <\/code><\/pre>\n<p>  \u0414\u0430 \u0443\u0436, \u0432\u044b\u0448\u043b\u043e \u043d\u0435 \u043d\u0430\u043c\u043d\u043e\u0433\u043e \u043a\u0440\u0430\u0441\u0438\u0432\u0435\u0435. \u042d\u0442\u043e \u0441\u0432\u044f\u0437\u0430\u043d\u043e \u0441 \u0442\u0435\u043c, \u0447\u0442\u043e \u043c\u043e\u043d\u0430\u0434\u044b \u043a\u0440\u0430\u0441\u0438\u0432\u043e \u043f\u0438\u0448\u0443\u0442\u0441\u044f \u0434\u043b\u044f \u043e\u0434\u043d\u043e\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439. \u041a \u0441\u0447\u0430\u0441\u0442\u044c\u044e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u043c\u043d\u043e\u0433\u043e \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439.<br \/>  \u041c\u043e\u0436\u043d\u043e \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439 <code>liftM2<\/code>  <\/p>\n<pre><code class=\"haskell\">bind2 :: Monad m =&gt; (a -&gt; b -&gt; m c) -&gt; m a -&gt; m b -&gt; m c bind2 mf mx my =  do         x &lt;- mx        y &lt;- my        mf x y <\/code><\/pre>\n<p>  <\/p>\n<pre><code class=\"haskell\"> a''' = bind2 bar a' a'' <\/code><\/pre>\n<p>  \u0418\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044e <code>liftM2<\/code> \u0438 <code>join<\/code>  <\/p>\n<pre><code class=\"haskell\">liftM2 :: Monad m =&gt; (a1 -&gt; a2 -&gt; r) -&gt; m a1 -&gt; m a2 -&gt; m r join :: Monad m =&gt; m (m a) -&gt; m a  a''' = join $ liftM2 bar a' a'' <\/code><\/pre>\n<p>  \u041d\u0430 \u043a\u0440\u0430\u0439\u043d\u0438\u0439 \u0441\u043b\u0443\u0447\u0430\u0439, \u043c\u043e\u0436\u043d\u043e \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u0441\u0430\u0445\u0430\u0440\u043e\u043c \u0434\u043b\u044f \u043c\u043e\u043d\u0430\u0434, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f <code>do<\/code> \u043d\u043e\u0442\u0430\u0446\u0438\u044e:  <\/p>\n<pre><code class=\"haskell\">    a''' = do \t\ta1 &lt;- a' \t\ta2 &lt;- a'' \t\tbar a1 a2 <\/code><\/pre>\n<p>  <\/p>\n<h4>\u0420\u0430\u0437\u043b\u0438\u0447\u0438\u0435 \u0432 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u0444\u0443\u043d\u0442\u043e\u0440\u043e\u0432 \u0438 \u043c\u043e\u043d\u0430\u0434<\/h4>\n<p>  \u0415\u0441\u043b\u0438 \u043c\u044b \u0441\u0432\u0435\u0434\u0451\u043c \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043a \u043e\u0434\u043d\u043e\u043c\u0443 \u0432\u0438\u0434\u0443, \u0442\u043e \u0443\u0432\u0438\u0434\u0438\u043c:  <\/p>\n<pre><code class=\"haskell\">(&lt;$&gt;) :: Functor     f =&gt;   (a -&gt;   b) -&gt; f a -&gt; f b (&lt;*&gt;) :: Applicative f =&gt; f (a -&gt;   b) -&gt; f a -&gt; f b (=&lt;&lt;) :: Monad       f =&gt;   (a -&gt; f b) -&gt; f a -&gt; f b <\/code><\/pre>\n<p>  \u0412\u0441\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c \u00ab\u0433\u0440\u044f\u0437\u043d\u044b\u0435\u00bb \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u0442\u043e\u0433\u0434\u0430 \u043a\u0430\u043a \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043e\u0436\u0438\u0434\u0430\u044e\u0442 \u00ab\u0447\u0438\u0441\u0442\u044b\u0435\u00bb \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043d\u0430 \u0432\u0445\u043e\u0434\u0435.<br \/>  \u0424\u0443\u043d\u0442\u043e\u0440\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u00ab\u0447\u0438\u0441\u0442\u0443\u044e\u00bb \u0444\u0443\u043d\u043a\u0446\u0438\u044e.<br \/>  \u0410\u043f\u043f\u043b\u0438\u043a\u0430\u0442\u0438\u0432\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0442\u043e\u0440\u044b \u2014 \u00ab\u0447\u0438\u0441\u0442\u0443\u044e\u00bb \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0432\u043d\u0443\u0442\u0440\u0438 \u00ab\u0437\u0430\u0433\u0440\u044f\u0437\u043d\u0435\u043d\u0438\u044f\u00bb.<br \/>  \u041c\u043e\u043d\u0430\u0434\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 \u0438\u043c\u0435\u044e\u0442 \u00ab\u0433\u0440\u044f\u0437\u043d\u043e\u0435\u00bb \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435.<\/p>\n<h4>\u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0431\u0435\u0437 \u0440\u0443\u0442\u0438\u043d\u044b<\/h4>\n<p>  \u0427\u0442\u043e \u0436, \u043d\u0430\u043a\u043e\u043d\u0435\u0446, \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0438 \u0430\u043a\u043a\u0443\u0440\u0430\u0442\u043d\u043e \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u0442\u044c \u0432\u0441\u044e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443:  <\/p>\n<pre><code class=\"haskell\">module Main where  import Control.Monad import Control.Applicative import Text.Read (readMaybe)  bind2 :: Monad m =&gt; (a -&gt; b -&gt; m c) -&gt; m a -&gt; m b -&gt; m c bind2 mf mx my =  do         x &lt;- mx        y &lt;- my        mf x y  baz :: Int -&gt; Int -&gt; Int baz = (+)  baz1 :: Int -&gt; Int baz1 = (+ 1)  bar :: Int -&gt; Int -&gt; Maybe Int bar a b = if b == 0  \t\t  then Nothing           --safe \t\t  else Just (div a b)  foo :: String -&gt; String -&gt; Maybe Int foo a b = bind2 bar a''' b''     where \t   \t  a' :: Maybe Int \t  a' = readMaybe a       --safe \t   \t  b' :: Maybe Int \t  b' = readMaybe b       --safe \t   \t  b'' :: Maybe Int \t  b'' = fmap baz1 b' \t   \t  a'' :: Maybe Int \t  a'' = baz &lt;$&gt; a' &lt;*&gt; b'' \t   \t  a''' :: Maybe Int \t  a''' = bind2 bar a' a''  printMaybe :: Show a =&gt; Maybe a -&gt; IO () printMaybe Nothing  = print &quot;Something Wrong&quot; printMaybe (Just a) = print a  main :: IO () main = do     putStrLn &quot;Input a: &quot;     a &lt;- getLine \tputStrLn &quot;Input b: &quot; \tb &lt;- getLine \tprintMaybe (foo a b) <\/code><\/pre>\n<p>  \u041a\u043e\u0434 \u0441\u043d\u043e\u0432\u0430 \u0441\u0442\u0430\u043b \u043f\u0440\u043e\u0441\u0442 \u0438 \u043f\u043e\u043d\u044f\u0442\u0435\u043d! <br \/>  \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u043c\u044b \u043d\u0435 \u043f\u043e\u0441\u0442\u0443\u043f\u0438\u043b\u0438\u0441\u044c \u043d\u0438 \u043f\u044f\u0434\u044c\u044e \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438!<br \/>  \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u043c\u044b \u043f\u043e\u0447\u0442\u0438 \u043d\u0435 \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u0438 \u043a\u043e\u0434!<br \/>  \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0447\u0438\u0441\u0442\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043e\u0441\u0442\u0430\u043b\u0438\u0441\u044c \u0447\u0438\u0441\u0442\u044b\u043c\u0438!<br \/>  \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0438\u0437\u0431\u0435\u0436\u0430\u043b\u0438 \u0440\u0443\u0442\u0438\u043d\u044b!<\/p>\n<h4>\u0412\u044b\u0432\u043e\u0434<\/h4>\n<p>  \u041c\u043e\u0436\u043d\u043e \u043b\u0438 \u0436\u0438\u0442\u044c \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u043c \u043c\u0438\u0440\u0435 \u0431\u0435\u0437 \u0444\u0443\u043d\u043a\u0442\u043e\u0440\u043e\u0432 \u0438 \u043c\u043e\u043d\u0430\u0434? \u041c\u043e\u0436\u043d\u043e.<br \/>  \u041d\u043e, \u0435\u0441\u043b\u0438 \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u0432\u043e\u0432\u0441\u044e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u044e \u0441\u0438\u043b\u0443 \u0410\u043b\u0433\u0435\u0431\u0440\u0430\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0422\u0438\u043f\u043e\u0432 \u0414\u0430\u043d\u043d\u044b\u0445, \u043d\u0430\u043c \u0434\u043b\u044f \u0443\u0434\u043e\u0431\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0442\u043e\u0440\u044b \u0438 \u043c\u043e\u043d\u0430\u0434\u044b.<br \/>  \u0418\u0431\u043e \u044d\u0442\u043e \u043e\u0442\u043b\u0438\u0447\u043d\u043e\u0435 \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e \u043e\u0442 \u0440\u0443\u0442\u0438\u043d\u044b \u0438 \u043f\u0443\u0442\u044c \u043a \u043a\u0440\u0430\u0442\u043a\u043e\u043c\u0443, \u043f\u043e\u043d\u044f\u0442\u043d\u043e\u043c\u0443 \u0438 \u0447\u0430\u0441\u0442\u043e \u043f\u0435\u0440\u0435-\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u043e\u043c\u0443 \u043a\u043e\u0434\u0443!<\/p>\n<p>  <b>P.S.<\/b> \u0421\u043b\u0435\u0434\u0443\u0435\u0442 \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c, \u0447\u0442\u043e \u0434\u043b\u044f \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432 \u0434\u0430\u043d\u043d\u044b\u0445, \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u044f \u0441 \u00ab\u0447\u0438\u0441\u0442\u044b\u043c\u0438\u00bb \u0438 \u00ab\u0433\u0440\u044f\u0437\u043d\u044b\u043c\u0438\u00bb \u0442\u0438\u043f\u0430\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0435 \u0441\u043e\u0432\u0441\u0435\u043c \u0443\u043c\u0435\u0441\u0442\u043d\u0430.<br \/>  \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0434\u043b\u044f \u0441\u043f\u0438\u0441\u043a\u043e\u0432<br \/>  <code>fmap = map<\/code><br \/>  \u0410 \u043c\u043e\u043d\u0430\u0434\u0430:  <\/p>\n<pre><code class=\"haskell\">    a = do \t\tc &lt;- cs \t\td &lt;- ds \t\treturn (zet c d) <\/code><\/pre>\n<p>  \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f  <\/p>\n<pre><code class=\"haskell\">a = [zet c d | c &lt;- cs, d &lt;- ds] <\/code><\/pre>\n<p>  \u0427\u0442\u043e \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e \u0441 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0432\u0437\u0433\u043b\u044f\u0434\u0430.    \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\/212955\/\"> http:\/\/habrahabr.ru\/post\/212955\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div class=\"content html_format\">   \t\u041e\u0447\u0435\u043d\u044c \u0447\u0430\u0441\u0442\u043e \u0432 \u0441\u0442\u0430\u0442\u044c\u044f\u0445 \u043f\u0440\u043e \u0425\u0430\u0441\u043a\u0435\u043b\u044c \u0441\u043f\u043b\u043e\u0448\u044c \u0438 \u0440\u044f\u0434\u043e\u043c \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u044e\u0442\u0441\u044f \u0444\u0443\u043d\u043a\u0442\u043e\u0440\u044b \u0438 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u043c\u043e\u043d\u0430\u0434\u044b.<br \/>  \u0422\u0430\u043a \u0447\u0430\u0441\u0442\u043e, \u0447\u0442\u043e \u043f\u043e\u0440\u043e\u0439 \u043d\u0435 \u0440\u0435\u0436\u0435 \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u044e\u0442\u0441\u044f \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438 \u00ab\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u043d\u043e\u0432\u044b\u0435 \u043c\u043e\u043d\u0430\u0434\u044b\u00bb \u0438 \u00ab\u043f\u0438\u0448\u0438\u0442\u0435 \u043e \u0447\u0451\u043c-\u043b\u0438\u0431\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u043c\u00bb.<br \/>  \u041d\u0430 \u043c\u043e\u0439 \u0432\u0437\u0433\u043b\u044f\u0434 \u044d\u0442\u043e \u0441\u0432\u0438\u0434\u0435\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u0443\u0435\u0442 \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u043b\u044e\u0434\u0438 \u043f\u043e\u0440\u043e\u0439 \u043d\u0435 \u043f\u043e\u043d\u0438\u043c\u0430\u044e\u0442 \u0437\u0430\u0447\u0435\u043c \u0436\u0435 \u043d\u0443\u0436\u043d\u044b \u0432\u0441\u0435 \u044d\u0442\u0438 \u0444\u0443\u043d\u043a\u0442\u043e\u0440\u044b \u0438 \u043c\u043e\u043d\u0430\u0434\u044b.<\/p>\n<p>  \u042d\u0442\u043e \u0441\u0442\u0430\u0442\u044c\u044f \u043f\u043e\u043f\u044b\u0442\u043a\u0430 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e \u0441\u0438\u043b\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0445 \u044f\u0437\u044b\u043a\u043e\u0432 \u0438 \u0432 \u043f\u0435\u0440\u0432\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0425\u0430\u0441\u043a\u0435\u043b\u044f \u2014 \u044d\u0442\u043e \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0438 \u0441\u0438\u043b\u0435 \u0444\u0443\u043d\u043a\u0442\u043e\u0440\u043e\u0432 \u0438 \u043c\u043e\u043d\u0430\u0434.<br \/>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/665\/815\/3a8\/6658153a81883ae24da9bc4fdfe5714e.png\"\/>  <\/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-212955","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/212955","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=212955"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/212955\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=212955"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=212955"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=212955"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}