рдХреЛрдИ рднреА рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдЬреЛ рд╣реЗрдХреЗрд▓ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рддрд╛ рд╣реИ, рд╡рд╣ рдЬрд▓реНрдж рд╣реА рдпрд╛ рдмрд╛рдж рдореЗрдВ рдПрдХ
рд╕рдиреНрдпрд╛рд╕реА рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреА рдПрдХ рдЕрддреБрд▓рдиреАрдп рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЗ рдкрд╛рд░ рдЖрдПрдЧрд╛ред рдХрдИ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП, рднрд╛рд╖рд╛ рдХрд╛ рдкрд░рд┐рдЪрдп рднрд┐рдХреНрд╖реБрдУрдВ рд╕реЗ рд╣реЛрддрд╛ рд╣реИред рдХрдИ рдореЛрдирд╛рдб рдЧрд╛рдЗрдб рд╣реИрдВ, рдФрд░ рдирдП рд▓рдЧрд╛рддрд╛рд░ рджрд┐рдЦрд╛рдИ рджреЗ рд░рд╣реЗ рд╣реИрдВ (1)ред рдЬреЛ рдХреБрдЫ рд▓реЛрдЧ рднрд┐рдХреНрд╖реБрдУрдВ рдХреЛ рд╕рдордЭрддреЗ рд╣реИрдВ, рд╡реЗ рдзреНрдпрд╛рди рд╕реЗ рдЕрдкрдиреЗ рдЬреНрдЮрд╛рди рдХреЛ рдЫрд┐рдкрд╛рддреЗ рд╣реИрдВ, рдЬреЛ рдЕрдВрддреЛрджрдп рдФрд░ рдкреНрд░рд╛рдХреГрддрд┐рдХ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ (2) рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рднрд┐рдХреНрд╖реБрдУрдВ рдХреЛ рд╕рдордЭрд╛рддреЗ рд╣реИрдВред рдХреЛрдИ рднреА рдЕрдиреБрднрд╡реА рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рджреБрдирд┐рдпрд╛ рдХреА рдЕрдкрдиреА рд╕реНрдерд╛рдкрд┐рдд рддрд╕реНрд╡реАрд░ рдореЗрдВ рднрд┐рдХреНрд╖реБрдУрдВ рдХреЗ рд▓рд┐рдП рдЬрдЧрд╣ рдирд╣реАрдВ рдкрд╛ рд╕рдХрддрд╛ рд╣реИред
рдирддреАрдЬрддрди, рдЬрд╛рд╡рд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░реНрд╕ рдХреЗрд╡рд▓ рд╣рд╛рд╕реНрдХреЗрд▓ рдореЗрдВ рдЪрдХрд▓реА рдХрд░рддреЗ рд╣реИрдВ, рдЕрдкрдиреЗ рдорд┐рд▓рд┐рдпрди-рд▓рд╛рдЗрди рдПрдВрдЯрд░рдкреНрд░рд╛рдЗрдЬ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗ рдирд╣реАрдВред рд╕реА ++ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЕрдкрдиреЗ рд╕реБрдкрд░-рдлрд╛рд╕реНрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдкреИрдЪ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдзрд┐рдХ рдЪрд╛рд▓рд╛рдХ рдмрд┐рдВрджреБрдУрдВ рдХреЗ рд╕рд╛рде рдЖрддреЗ рд╣реИрдВред рд╡реЗрдм рдбреЗрд╡рд▓рдкрд░реНрд╕ рд╕реАрдПрд╕рдПрд╕, рдПрдХреНрд╕рдПрдордПрд▓ рдФрд░ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд▓рд┐рдП рдЙрджрд╛рд╣рд░рдгреЛрдВ рдФрд░ рд╡рд┐рд╢рд╛рд▓ рд╡рд┐рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЫреЛрдбрд╝рддреЗ рд╣реИрдВред рдФрд░ рдЬреЛ рд▓реЛрдЧ рдЕрдкрдиреЗ рдЦрд╛рд▓реА рд╕рдордп рдореЗрдВ рд╣реИрд╕реНрдХреЗрд▓ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рддреЗ рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рдПрдХ рдЕрдЬреЗрдп рдмрд╛рдзрд╛ рдХреЗ рд╕рд╛рде рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдореЛрдирд╛рдбреНрд╕ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЗрд╕рд▓рд┐рдП, рд╣рдо рд╕реАрдЦреЗрдВрдЧреЗ рдХрд┐
рдмрд┐рдирд╛ рд╕рд╛рдзреБрдУрдВ рдХреЗ рд╣рд╛рд╕реНрдХреЗрд▓ рдореЗрдВ рдХреИрд╕реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд┐рдпрд╛ рдЬрд╛рдПред
рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдереЛрдбрд╝рд╛ рдЦрд╛рд▓реА рд╕рдордп, рдПрдХ рдЕрдЪреНрдЫреА рд░рд╛рдд рдХреА рдиреАрдВрдж, рд╣рдорд╛рд░реЗ рдкрд╕рдВрджреАрджрд╛ рдкреЗрдп рдХрд╛ рдПрдХ рдордЧ рдФрд░ ghc рд╕рдВрдХрд▓рдХ рдЪрд╛рд╣рд┐рдПред рд╡рд┐рдВрдбреЛрдЬрд╝ рдФрд░ рдореИрдХреЛрд╕ рдореЗрдВ, рдпрд╣ рд╣реИрд╕реЗрд▓ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо (3) рдкреИрдХреЗрдЬ рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓рд┐рдирдХреНрд╕ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╕реЗ ghc рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред Prelude> рд╕реЗ рд╢реБрд░реВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдирдореВрдирд╛ рдХреЛрдб рдХреЛ рдЗрдВрдЯрд░рдПрдХреНрдЯрд┐рд╡ рдЗрдВрдЯрд░рдкреНрд░реЗрдЯрд░ ghci рдореЗрдВ рдЬрд╛рдВрдЪрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рд╣рдм (4) рдкрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рд╕рдорд╛рди рд▓реЗрдЦ рдерд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдЗрдирдкреБрдЯ-рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд╕рднреА рдЖрдИрдПрдирдПрд╕ рдФрд░ рдмрд╣рд┐рд╖реНрдХрд╛рд░ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдмрд╕ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдЯреЗрдореНрдкрд▓реЗрдЯ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
рдЕрдЧрд▓реЗ рдЪрд░рдг рдкрд░ рдЬрд╛рдПрдВ - рдСрдкрд░реЗрдЯрд░
рдЪрд▓реЛ рд╢реБрд░реВ рд╕реЗред рд╣рд╛рд╕реНрдХреЗрд▓ рдореЗрдВ рд╕рднреА рдЧрдгрдирд╛ "рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯреНрд╕" рдФрд░ "рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯреНрд╕ рдХреЗ рдмрд┐рдирд╛" рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдереЗред рдкрд╣рд▓реЗ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрдирдкреБрдЯ / рдЖрдЙрдЯрдкреБрдЯ рдЙрдкрдХрд░рдгреЛрдВ рд╕реЗ рд▓рд┐рдЦрдирд╛ / рдкрдврд╝рдирд╛, рдмреАрдЪ рдореЗрдВ рдХрд╣реАрдВ рддреНрд░реБрдЯрд┐ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЗ рд╕рд╛рде рдЧрдгрдирд╛, рдЖрджрд┐ред "рдХреЛрдИ рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯ" рдореЗрдВ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝рдирд╛, рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЛ рдХрд┐рд╕реА рднреА рдЧрдгрд┐рддреАрдп рдЧрдгрдирд╛ - рдХрд┐рд╕реА рднреА "рд╢реБрджреНрдз" рдХрд╛рд░реНрдпреЛрдВ рдЬреИрд╕реЗ рд╕рдВрдЪрд╛рд▓рди рд╢рд╛рдорд┐рд▓ рд╣реИрдВред
рд╢реБрджреНрдз рдХрд╛рд░реНрдп рдЙрд╕реА рддрд░рд╣ рд╕реЗ рд╕рдВрдпреЛрдЬрд┐рдд рд╣реЛрддреЗ рд╣реИрдВ рдЬреИрд╕реЗ рдЕрдиреНрдп рд╕рднреА рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддреЗ рд╣реИрдВ:
Prelude> show (head (show ((1 + 1) -2))) '0'
рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯреНрд╕ рд╡рд╛рд▓реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рд╡рд┐рд╢реЗрд╖ рдСрдкрд░реЗрдЯрд░ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛
>>=
рдЪрд▓реЛ рдЗрд╕реЗ "рдХрдиреЗрдХреНрдЯ" рдХрд╣рддреЗ рд╣реИрдВ (рд╕рдВрд▓рдЧреНрдиред рдмрд╛рдЗрдВрдб)ред рд╕рднреА I / O рдХреНрд░рд┐рдпрд╛рдПрдБ рдЙрдирд╕реЗ рдЪрд┐рдкрдХреА рд╣реБрдИ рд╣реИрдВ:
Prelude> getLine >>= putStrLn asdf asdf
рдпрд╣ рдСрдкрд░реЗрдЯрд░ рдЗрдирдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рджреБрд╖реНрдкреНрд░рднрд╛рд╡реЛрдВ рдХреЗ рд╕рд╛рде 2 рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдмрд╛рдПрдВ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЖрдЙрдЯрдкреБрдЯ рджрд╛рдИрдВ рдУрд░ рдЗрдирдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред
рдЖрдЗрдП рджреБрднрд╛рд╖рд┐рдП рдХреЗ рдХрдорд╛рдВрдб рдХреЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рджреЗрдЦреЗрдВ: t:
Prelude> :t getLine getLine :: IO String Prelude> :t putStrLn putStrLn :: String -> IO ()
рддреЛ рдЧреЗрдЯрд▓рд╛рдЗрди рдХреБрдЫ рднреА рд╕реНрд╡реАрдХрд╛рд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдПрдХ IO рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреНрд░рдХрд╛рд░ рд▓реМрдЯрд╛рддрд╛ рд╣реИред
рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдЯрд╛рдЗрдк рдирд╛рдо рдореЗрдВ 2 рд╢рдмреНрдж рд╣реИрдВ, рдпрд╣ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдкреНрд░рдХрд╛рд░ рд╕рдВрдпреБрдХреНрдд рд╣реИред рдФрд░ рдЬреЛ рд╢рдмреНрдж рдкрд╣рд▓реЗ рдЖрддрд╛ рд╣реИ, рд╣рдо рдЯрд╛рдЗрдк рдмрд┐рд▓реНрдбрд░ рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВрдЧреЗ, рдФрд░ рдмрд╛рдХреА рд╕рдм рдЗрд╕ рдмрд┐рд▓реНрдбрд░ рдХреЗ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИрдВ (рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЕрд╕рдВрдЧрдд рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП)ред
рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, IO рд╢рдмреНрдж рдХрд╛ рдЕрд░реНрде рдХреЗрд╡рд▓ рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯ рд╣реИ, рдФрд░ рдЗрд╕реЗ рдСрдкрд░реЗрдЯрд░ = рджреНрд╡рд╛рд░рд╛ рддреНрдпрд╛рдЧ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯреНрд╕ рдХреЗ рдЕрдиреНрдп "рд╕рдВрдХреЗрддрдХреЛрдВ" рдХреЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдо рд▓реЛрдХрдкреНрд░рд┐рдп рдкреНрд░рдХрд╛рд░ рдХреЗ рд░рд╛рдЬреНрдп рдХрд╛ рд╣рд╡рд╛рд▓рд╛ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рд░рд╛рдЬреНрдп рд╣реИред
рдЪрд▓реЛ putStrLn рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВред рдлрд╝рдВрдХреНрд╢рди рдЗрдирдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд▓реЗрддрд╛ рд╣реИ, рдФрд░ IO () рд▓реМрдЯрд╛рддрд╛ рд╣реИред IO рдХреЗ рд╕рд╛рде, рд╕рдмрдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рд╣реИ, рдПрдХ рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯ, рдФрд░ () рд╕рд┐рд╕рд╕рд▓ рд╢реВрдиреНрдп рдХрд╛ рдПрдХ рд╣рд╛рд╕реНрдХреЗрд▓ рдПрдирд╛рд▓реЙрдЧ рд╣реИред рдпрд╛рдиреА рдлрд╝рдВрдХреНрд╢рди рдЗрдирдкреБрдЯ / рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд╕рд╛рде рдХреБрдЫ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдПрдХ рдЦрд╛рд▓реА рдорд╛рди рджреЗрддрд╛ рд╣реИред рд╡реИрд╕реЗ, рд╕рднреА рд╣рд╛рд╕реНрдХреЗрд▓ рдХрд╛рд░реНрдпрдХреНрд░рдо рдЗрд╕ рдмрд╣реБрдд рд╣реА IO () рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдПред
рддреЛ, "рдХрдиреЗрдХреНрдЯ" рдСрдкрд░реЗрдЯрд░ рдЕрдкрдиреЗ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдкрд╣рд▓реЗ рддрд░реНрдХ рд╕реЗ рд▓реЗрддрд╛ рд╣реИ, рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯ рдЗрдВрдбрд┐рдХреЗрдЯрд░ рдХреЛ рдХрд╛рдЯрддрд╛ рд╣реИ рдФрд░ рдкрд╛рд╕ рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдЗрд╕рдХреЗ рджреВрд╕рд░реЗ рддрд░реНрдХ рдореЗрдВ рд╣реБрдЖред рдпрд╣ рдЬрдЯрд┐рд▓ рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рд╛рд╕реНрдХреЗрд▓ рдХрд╛ рдЖрдзрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдЗрд╕ рдПрдХрд▓ рдХрдерди рдкрд░ рд╕рдорд░реНрдерд┐рдд рд╣реИ, рд╕рднреА рдЗрдирдкреБрдЯ / рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдЗрддрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдЗрд╕реЗ рднрд╛рд╖рд╛ рдХреЗ рд▓реЛрдЧреЛ рдореЗрдВ рднреА рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛ред
рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рдЪрд┐рдкрдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓реМрдЯреЗ рдФрд░ рд╕реНрд╡реАрдХреГрдд рдореВрд▓реНрдп рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддреЗ рд╣реИрдВ? рд▓рд╛рдореНрдмрд╛ рдХреЗ рдХрд╛рд░реНрдп рдмрдЪрд╛рд╡ рдореЗрдВ рдЖрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рдХреЗрд╡рд▓ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдЗрдирдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд╕рд╛рде рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ:
Prelude> (putStrLn " 1") >>= (\a -> putStrLn " 2") >>= (\b -> putStrLn " 3") 1 2 3
рдЖрдЧреЗ рджреЗрдЦрддреЗ рд╣реБрдП, рдореИрдВ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ "=" рдСрдкрд░реЗрдЯрд░ рдХреА рдмрд╣реБрдд рдХрдо рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╣реИ рдФрд░, рдпрджрд┐ рд╡рд╛рдВрдЫрд┐рдд рд╣реИ, рддреЛ рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдЖрдк рдмрд┐рдирд╛ рдХреЛрд╖реНрдардХ рдХреЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрджрд┐ рд▓реИрдВрдмрдбрд╛ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрджрд░ рддрд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдЖрдк рдЗрд╕реЗ _ рд╕реЗ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред
рдЪрд▓реЛ рдкрд╣рд▓реЗ рдЙрджрд╛рд╣рд░рдг рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдордХрдХреНрд╖ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд▓рдВрдмреЛ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП:
Prelude> getLine >>= \a -> putStrLn a asdf asdf
рд╕реНрдХреНрд░реАрди рдкрд░ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреЗ рд╕рдордп, рд▓рдВрдмреЛ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рд╣рдордиреЗ рдЕрдм рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕рдВрдХреЗрдд рджрд┐рдпрд╛ рдХрд┐ рд╣рдо рдПрдХ рдЪрд░ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рд░рд╣реЗ рдереЗ рдФрд░ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд▓рд┐рдЦрд╛ рдерд╛ рдХрд┐ рд╣рдо рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░рддреЗ рд╣реИрдВред
рдХреНрдпрд╛ рдЖрдкрдиреЗ "рдкрд░рд┐рд╡рд░реНрддрдирд╢реАрд▓" рдХрд╣рд╛ рдерд╛?
рдЬреА рд╣рд╛рдВ, рдЕрдм рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВ рдЪрд░реЛрдВ рдХреАред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ, рд╣рд╛рд╕реНрдХреЗрд▓ рдореЗрдВ рдХреЛрдИ рдЪрд░ рдирд╣реАрдВ рд╣реИрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА рд╕реВрдЪреА рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдХрдИ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рджрд┐рдЦрд╛рдИ рджреЗрдВрдЧреЗред
рдКрдкрд░ рджрд┐рдП рдЧрдП рдХреЛрдб рдореЗрдВ, рдП рдФрд░ рдмреА рдЪрд░ рдХреЗ рд╕рдорд╛рди рд╣реИрдВред рдЙрдиреНрд╣реЗрдВ рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рдХреА рддрд░рд╣ рднреА рд╕рдВрджрд░реНрднрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпреЗ рдП рдФрд░ рдмреА рдЕрдирд┐рд╡рд╛рд░реНрдп рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдЪрд░ рд╕реЗ рдХрд╛рдлреА рдЕрд▓рдЧ рд╣реИрдВред
рд╕рднреА рдЕрдирд┐рд╡рд╛рд░реНрдп рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ, рдПрдХ рдЪрд░ рд╕реНрдореГрддрд┐ рдХрд╛ рдПрдХ рдирд╛рдорд┐рдд рдХреНрд╖реЗрддреНрд░ рд╣реИред рд╣рд╛рд╕реНрдХреЗрд▓ рдореЗрдВ, рдП рдФрд░ рдмреА рдЬреИрд╕реА рдЪреАрдЬреЛрдВ рдХреЛ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдФрд░ рдореВрд▓реНрдпреЛрдВ рдХрд╛ рдирд╛рдо рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рд╣рдо рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрддреЗ рд╣реИрдВ рдФрд░ рдЗрди рдЕрдВрддрд░реЛрдВ рдХреЛ рджрд┐рдЦрд╛рддреЗ рд╣реИрдВред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕реА рдХреЛрдб рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
a = 1
рд╕рдм рдХреБрдЫ рдХреНрд░рд┐рд╕реНрдЯрд▓ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдФрд░ рдкрд░рд┐рдгрд╛рдо рдЕрдиреБрдорд╛рдирд┐рдд рд╣реИред
рдЕрдм рд╣рд╛рд╕реНрдХреЗрд▓ рдкрд░ рднреА рдРрд╕рд╛ рд╣реА рдХрд░реЗрдВ:
Prelude> let a = 1 Prelude> let a = a + 1 Prelude> print a ^CInterrupted.
рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрди рдХрднреА рд╕рдорд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐ рдореЗрдВ, рд╣рдо рдПрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рджреВрд╕рд░реА рдкрдВрдХреНрддрд┐ рдореЗрдВ, рд╣рдо рдПрдХ + 1 рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рджреВрд╕рд░реА рдкрдВрдХреНрддрд┐ рдХреЛ рдкрдврд╝рддреЗ рд╕рдордп, рджреБрднрд╛рд╖рд┐рдпрд╛ рдПрдХ рдХреЗ рдкрд┐рдЫрд▓реЗ рдореВрд▓реНрдп рдХреЛ рднреВрд▓ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рд╕реЗ, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЦреБрдж рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИред рдЦреИрд░, рдЗрд╕ рдкреБрдирд░рд╛рд╡рд░реНрддреА рдкрд░рд┐рднрд╛рд╖рд╛ рдХреА рдЧрдгрдирд╛ рдХрднреА рдирд╣реАрдВ рдХреА рдЬрд╛рдПрдЧреАред
рд╕реНрдореГрддрд┐ рдХреЗ рдирд╛рдорд┐рдд рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рд▓рд┐рдП - рд╡реЗ рд╣рд╛рд╕реНрдХреЗрд▓ рдореЗрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рдХрд╣рд╛рдиреА рд╣реИред
рдЗрд╕ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЖрдк "рдХрдиреЗрдХреНрдЯ" рдСрдкрд░реЗрдЯрд░ рдХреЗ рдХрдИ рдХреЙрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреИрд░рд╛рдореАрдЯрд░ рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
Prelude> getLine >>= \a -> putStrLn " :" >>= \_ -> putStrLn a asdf : asdf
рдЕрд╕рд▓реА рдХреЛрдб
рдЕрдм рдЕрдкрдиреЗ рдЧреБрдкреНрдд рдЬреНрдЮрд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣рдо рдХреБрдЫ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд▓рд┐рдЦреЗрдВрдЧреЗред рдЕрд░реНрдерд╛рддреН, рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рдЙрди рдкрд░ рдХреБрдЫ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╕реНрдХреНрд░реАрди рдкрд░ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред рд╣рдо рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рд▓рд┐рдЦреЗрдВрдЧреЗ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ рдЕрд▓рдЧ рдлрд╛рдЗрд▓ рдореЗрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдЗрд╕реЗ рдорд╢реАрди рдХреЛрдб рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдирд╛рдо рдмрддрд╛рдПрдВред
main = putStrLn " :" >>= \_ -> getLine >>= \a -> putStrLn " :" >>= \_ -> putStrLn (show ((read a)^2))
рд╕рдВрдХрд▓рди:
ghc
рдЪрд▓рд╛рдПрдБ:
$ ./test : 12 : 144
рдкрдврд╝рд╛ рдЧрдпрд╛ рдлрд╝рдВрдХреНрд╢рди рд╡рд╛рдВрдЫрд┐рдд рдкреНрд░рдХрд╛рд░ рдХреЗ рдорд╛рди рдореЗрдВ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реИред рд╡рд╣ рдЦреБрдж рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рддреА рд╣реИ рдпрд╣ рдПрдХ рдЕрд▓рдЧ рдХрд╣рд╛рдиреА рд╣реИред рд╢реЛ рдлрд╝рдВрдХреНрд╢рди рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдорд╛рди рдХреЛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддрд╛ рд╣реИред
рд░реАрдб рдлрд╝рдВрдХреНрд╢рди рд╕реБрд░рдХреНрд╖рд┐рдд рдирд╣реАрдВ рд╣реИ, рдЕрдЧрд░ рд╣рдо рдЗрд╕реЗ рдЕрдХреНрд╖рд░ рджреЗрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдПрдХ рдирдВрдмрд░ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддреЗ рд╣реИрдВ, рддреЛ рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реЛрдЧреАред рд╣рдо рдЗрд╕ рдкрд░ рдзреНрдпрд╛рди рдирд╣реАрдВ рджреЗрдВрдЧреЗ, рдореИрдВ рдХреЗрд╡рд▓ рдпрд╣ рдЙрд▓реНрд▓реЗрдЦ рдХрд░реВрдВрдЧрд╛ рдХрд┐ рдЗрд╕ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реБрд░рдХреНрд╖рд┐рдд рдореЙрдбреНрдпреВрд▓ рд╣реИред
рдкрд╡рд┐рддреНрд░рддрд╛ рдХрд╛ рдкреНрд░рд╡реЗрд╢
рдЕрд▓рдЧ-рдЕрд▓рдЧ, рд╕рд╡рд╛рд▓ рдЙрдарддрд╛ рд╣реИ рдХрд┐ рд╕рд╛рдЗрдб-рдЗрдлреЗрдХреНрдЯ рдХреЛрдб рд╕реЗ рд╢реБрджреНрдз рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХреИрд╕реЗ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПред
рдЙрдкрд░реЛрдХреНрдд рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдПрдХ рд╢реБрджреНрдз рдлрд╝рдВрдХреНрд╢рди рдХреЛ IO рдлрд╝рдВрдХреНрд╢рди рдХреЗ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИред рдЕрдХреНрд╕рд░ рдпрд╣ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдореЗрд╢рд╛ рдирд╣реАрдВред
рдХреНрд▓реАрди рдХреЛрдб рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдЕрдиреНрдп рддрд░реАрдХреЗ рд╣реИрдВред
рдЗрдирдореЗрдВ рд╕реЗ рдкрд╣рд▓рд╛ рд╕рд╛рдл рдХреЛрдб рдХреЗ рд╣рд┐рдВрд╕рдХ рд░реВрдкрд╛рдВрддрд░рдг рдХреЛ рд╕рд╛рдЗрдб-рдЗрдлреЗрдХреНрдЯ рдХреЛрдб рдореЗрдВ рдмрджрд▓рдирд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╢реБрджреНрдз рдХреЛрдб рдХреЛ рд╕рд╛рдЗрдб-рдЗрдлреЗрдХреНрдЯ рдХрд╛ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓рд╛ рдорд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рд░реВрдкрд╛рдВрддрд░рдг рдХрд┐рд╕реА рднреА рдЦрддрд░реЗ рдХреЛ рдЙрддреНрдкрдиреНрди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдФрд░ рдпрд╣ рд░рд┐рдЯрд░реНрди рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
main = putStrLn " :" >>= \_ -> getLine >>= \a -> putStrLn " :" >>= \_ -> return (show ((read a)^2)) >>= \b -> putStrLn b
рд╣рдо рд╕рдВрдХрд▓рди, рд╕рддреНрдпрд╛рдкрди, рдХрд╛рд░реНрдпрдХреНрд░рдо рдкрд╣рд▓реЗ рдХреА рддрд░рд╣ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред
рдПрдХ рдФрд░ рддрд░реАрдХрд╛ рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо ... Haskel рдирд┐рд░реНрдорд╛рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдХрдИ рдореИрдиреБрдЕрд▓ рдореЗрдВ, рдЗрд╕ рдкрд░ рдкрд░реНрдпрд╛рдкреНрдд рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдордиреЗ рдЗрд╕ рдкрд░ рд░реЛрдХ рдирд╣реАрдВ рд▓рдЧрд╛рдИ рд╣реИ, рдореИрдВ рдЖрдкрдХреЛ рдПрдХ рддреИрдпрд╛рд░ рдЙрджрд╛рд╣рд░рдг рджреЗрддрд╛ рд╣реВрдВ:
main = putStrLn " :" >>= \_ -> getLine >>= \a -> putStrLn " :" >>= \_ -> let b = (show ((read a)^2)) in putStrLn b
рдЕрдзрд┐рдХ рдЪреАрдиреА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
рднрд╛рд╖рд╛ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдиреЗ рджреЗрдЦрд╛ рд╣реИ рдХрд┐ рдирд┐рд░реНрдорд╛рдг рдЖрдо рд╣реИрдВ
>>= \_ ->
рдЗрд╕рд▓рд┐рдП, рдЙрдиреНрд╣реЗрдВ рдирд┐рд░реВрдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдордиреЗ рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдкрд░рд┐рдЪрдп рджрд┐рдпрд╛
>>
рд╣рдорд╛рд░реЗ рдХреЛрдб рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦреЗрдВ:
main = putStrLn " :" >> getLine >>= \a -> putStrLn " :" >> let b = (show ((read a)^2)) in putStrLn b
рддреЛ рдпрд╣ рдереЛрдбрд╝рд╛ рдФрд░ рд╕реБрдВрджрд░ рд╣реЛ рдЧрдпрд╛ред
рд▓реЗрдХрд┐рди рдПрдХ рдХреВрд▓рд░ рдЯреНрд░рд┐рдХ рд╣реИ - рд╕рд┐рдВрдЯреИрдХреНрдЯрд┐рдХ рд╢реБрдЧрд░
"рдбреВ" :
main = do putStrLn " :" a <- getLine putStrLn " :" let b = (show ((read a)^2)) putStrLn b
рдЖрдкрдХреЛ рдХреНрдпрд╛ рдЪрд╛рд╣рд┐рдП! рддреЛ рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд░рд╣ рд╕рдХрддреЗ рд╣реИрдВред
рдПрдХ рдмреНрд▓реЙрдХ рдХреЗ рдЕрдВрджрд░, рдмрд╛рдПрдВ рдФрдЪрд┐рддреНрдп рддрдХ рд╕реАрдорд┐рдд, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рд╣реЛрддреЗ рд╣реИрдВ:
a <- abc abc >>= \a -> abc abc >> let a = b let a = b in do
"рдбреВ" рдЕрдВрдХрди рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЛ рд╕рднреА рдЖрдзреБрдирд┐рдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рд╕рдорд╛рди рдмрдирд╛рддрд╛ рд╣реИред рдлрд┐рд░ рднреА, рд╣реБрдб рдХреЗ рддрд╣рдд, рд╕реНрд╡рдЪреНрдЫ рдФрд░ рд╕рд╛рдЗрдб-рдЗрдлрд╝реЗрдХреНрдЯ рдХреЛрдб рдХреЛ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реБрд╡рд┐рдЪрд╛рд░рд┐рдд рддрдВрддреНрд░ рд╣реИред
рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдЕрдВрддрд░ рд░рд┐рдЯрд░реНрди рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣реИред рдЗрд╕реЗ рдмреНрд▓реЙрдХ рдХреЗ рдмреАрдЪ рдореЗрдВ рдбрд╛рд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рдмрд╛рдзрд┐рдд рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рдЬрд┐рд╕рд╕реЗ рдШрдмрд░рд╛рд╣рдЯ рд╣реЛ рд╕рдХрддреА рд╣реИред рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдХреНрд╕рд░ IO рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рд╢реБрджреНрдз рдорд╛рди рд▓реМрдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмреНрд▓реЙрдХ рдХреЗ рдЕрдВрдд рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
get2LinesAndConcat:: IO String get2LinesAndConcat = do a <- getLine b <- getLine return (a + b)
рдПрдХ рдирд┐рд░реНрд╡рд╛рдд рдореЗрдВ рдХреНрд╖реЗрддреНрд░
рдЕрдм рд╣рдо рдПрдХ рдЕрд▓рдЧ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдЕрдкрдирд╛ рд╕рд╛рдл рдХреЛрдб рдирд┐рдХрд╛рд▓рддреЗ рд╣реИрдВред рдФрд░ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ, рдЖрдЦрд┐рд░рдХрд╛рд░ рд▓рд╛рдкрддрд╛ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреА рд╡реНрдпрд╡рд╕реНрдерд╛ рдХрд░реЗрдВред
main :: IO () main = do putStrLn " :" a <- getLine putStrLn " :" let b = processValue (read a) putStrLn (show b) processValue :: Integer -> Integer processValue a = a ^ 2
рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдВрджреБ рдпрд╣ рд╣реИ рдХрд┐ рд╕рд╛рдЗрдб-рдЗрдлреЗрдХреНрдЯ I / O рдХреЛрдб рдХреЗрд╡рд▓ I / O рдХреЛрдб рд╕реЗ рдЪрд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдХреНрд▓реАрди рдХреЛрдб рдХрд╣реАрдВ рд╕реЗ рднреА рдЪрд▓ рд╕рдХрддрд╛ рд╣реИред
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдПрдХ рд╢реБрджреНрдз рдХрд╛рд░реНрдпрд╛рддреНрдордХ рджреБрдирд┐рдпрд╛ рд╕рдЦреНрддреА рд╕реЗ рдФрд░ рдордЬрд╝рдмреВрддреА рд╕реЗ рдЙрди рд╕рднреА рдЪреАрдЬреЛрдВ рд╕реЗ рдЕрд▓рдЧ рд╣реЛ рдЬрд╛рддреА рд╣реИ рдЬреЛ рджреБрд╖реНрдкреНрд░рднрд╛рд╡реЛрдВ рд╕реЗ рдЬреБрдбрд╝реА рд╣реЛрддреА рд╣реИрдВред рдкреНрд░реЛрд╕реЗрд╕рд╡реИрд▓реНрдпреВ рдХреЗ рдЕрдВрджрд░, рд╣рдо рдХреБрдЫ рднреА рд╡рд┐рдЪрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдХрд┐рд╕реА рднреА рддрд░реНрдХ рдХреЛ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдЧрд░ рдХреЛрдб рдХреА рдПрдХ рд▓рд╛рдЦ рд▓рд╛рдЗрдиреЛрдВ рд╕реЗ рддрд░реНрдХ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╣рдо рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХрд┐рд╕реА рднреА рдЗрдирдкреБрдЯ рдореВрд▓реНрдп рдХреЗ рд▓рд┐рдП, рдЖрдЙрдЯрдкреБрдЯ рд╣рдореЗрд╢рд╛ рд╕рдорд╛рди рд░рд╣реЗрдЧрд╛ред рдФрд░ рд╡рд╣рд╛рдВ рдкрд╛рд░рд┐рдд рдкреИрд░рд╛рдореАрдЯрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЦрд░рд╛рдм рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдЖрдк рдЗрд╕реЗ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдЖрдЧреЗ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд╢реИрд▓реАрдЧрдд рдорд╛рд░реНрдЧрджрд░реНрд╢рд┐рдХрд╛рдУрдВ рдореЗрдВ, рд╕рд╛рдЗрдб-рдЗрдлрд╝реЗрдХреНрдЯ рдХреЛрдб рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рдХрдо рдХрд░рдиреЗ рдФрд░ рд╢реБрджреНрдз рдХрд╛рд░реНрдпреЛрдВ (5) рдореЗрдВ рдЕрдзрд┐рдХрддрдо рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд▓рд╛рдиреЗ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХреА рдЧрдИ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрджрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдо I / O рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдЬрд╣рд╛рдБ рднреА рдЬрд╝рд░реВрд░рдд рд╣реЛ, рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдмрдЪрдирд╛ рдЪрд╛рд╣рд┐рдПред рдПрдХ рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ, рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╕рд╣рд╛рдпрдХ рдХрд╛рд░реНрдпреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬреЛ рд╢реБрджреНрдз рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдЕрдиреБрднрд╡реА рд╣рд╛рд╕реНрдХреЗрд▓ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдЕрдирд┐рд╡рд╛рд░реНрдп рднрд╛рд╖рд╛рдУрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ IO рдХреЛрдб рдХреЗ рдЙрддреНрдХреГрд╖реНрдЯ рд╕рдорд░реНрдерди рдХреЛ рдкрд╣рдЪрд╛рдирддреЗ рд╣реИрдВ (рдмрдпрд╛рди рд╕рд╛рдЗрдорди рдкреЗрдЯрди рдЬреЙрдиреНрд╕ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ, рд▓реЗрдХрд┐рди рдХреЛрдИ рд╕реАрдзрд╛ рд▓рд┐рдВрдХ рдирд╣реАрдВ рдорд┐рд▓рд╛ рдерд╛)ред
рд╢реБрджреНрдз рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХрд╛ рдПрдХ рдкрд╣рд▓реВ рд╣реИред рдЪрд▓реЛ рдПрдХ рдЙрддреНрдХреГрд╖реНрдЯ рдЙрджрд╛рд╣рд░рдг рд▓реЗрддреЗ рд╣реИрдВ, рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдХрдИ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдЬрдЯрд┐рд▓ "рдХрд░реНрдордЪрд╛рд░реА" рд╕рдВрд░рдЪрдирд╛ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред рддреЛ, рд╕реА рдХреЗ рд╕рд╛рде рд╕рд╛рджреГрд╢реНрдп рджреНрд╡рд╛рд░рд╛, рдХреЛрдб рдХреА рджрдХреНрд╖рддрд╛ рд╕реВрдЪрдХ рджреНрд╡рд╛рд░рд╛ рдЗрд╕ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреБрд▓рдиреАрдп рд╣реЛрдЧреА, рдФрд░ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдпрддрд╛ рд╕реНрдЯреИрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреБрд▓рдиреАрдп рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╕реА рдореЗрдВ рдХреЗрд╡рд▓ рд╕реНрдЯреИрдХ рд╕реЗ рдЧреБрдЬрд░рдирд╛ рдореВрд▓ рд╕рдВрд░рдЪрдирд╛ рдХреА рдкреНрд░рддрд┐рд░рдХреНрд╖рд╛ рдХреА рдЧрд╛рд░рдВрдЯреА рджреЗрддрд╛ рд╣реИред
рдХреНрдпрд╛ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реЛ
"рдпрд╣ рдХреЛрдб рднрдпрд╛рдирдХ рд╣реИ, рдпрд╣ рдЕрдиреБрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЬрдЯрд┐рд▓ рд╣реИ, рдЕрдиреНрдп рд╕рднреА рднрд╛рд╖рд╛рдУрдВ рдХреЗ рдЧрд░реНрдо рдЯреНрдпреВрдм рд╢рдмреНрджрд╛рд░реНрде рдХреЗ рд╕рд╛рде рдмрд╣реБрдд рдХрдо рд╣реИ, c / c ++ / c # / java / python рдЖрджрд┐ рдХрд┐рд╕реА рднреА рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред"
рдЦреИрд░, рдЗрд╕рдореЗрдВ рдХреБрдЫ рд╕рдЪреНрдЪрд╛рдИ рд╣реИред рдпрд╣рд╛рдВ рдЖрдкрдХреЛ рдпрд╣ рддрдп рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдХреНрдпрд╛ рд▓рдЧрддрд╛ рд╣реИ рднрдпрд╛рдирдХ рд╣реИ: рд╕реНрд╡рдЪреНрдЫ рдХреЛрдб рд╕реЗ рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯреНрд╕ рдХреЛ рдЕрд▓рдЧ рдХрд░рдирд╛ рдпрд╛ рдЗрд╕ рддрдВрддреНрд░ рдХрд╛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдиред
рдпрджрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рддрдВрддреНрд░ рдХреЛ рдХреИрд╕реЗ рд╕рд░рд▓ рдФрд░ рдЕрдзрд┐рдХ рд╕рдордЭрдиреЗ рдпреЛрдЧреНрдп рд╣реИ, рддреЛ рдХреГрдкрдпрд╛ рд╡рд┐рд╢реНрд╡ рд╕рдореБрджрд╛рдп рдХреЛ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рдПрдВ! рд╣рд╛рд╕реНрдХреЗрд▓ рд╕рдореБрджрд╛рдп рдмрд╣реБрдд рдЦреБрд▓рд╛ рдФрд░ рдореИрддреНрд░реАрдкреВрд░реНрдг рд╣реИред рдирдП рдорд╛рдирдХ рдХрд╛ рдорд╕реМрджрд╛, рдЬреЛ рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рдЕрдкрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХрд┐рд╕реА рднреА рдкреНрд░рд╕реНрддрд╛рд╡ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдпрджрд┐ рд╡реЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рд╛рд░реНрдердХ рд╣реИрдВ, рддреЛ рд╡реЗ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╕реНрд╡реАрдХрд╛рд░ рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗред
рдпрджрд┐ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ "рдЕрдЬрдЧрд░ рдореЗрдВ рднреА рд╕рдм рдХреБрдЫ рдЕрдЪреНрдЫрд╛ рд╣реИ, рддреЛ рдЖрдк рдЕрдкрдиреЗ рджреБрд╖реНрдкреНрд░рднрд╛рд╡реЛрдВ рд╕реЗ рдЬреБрдбрд╝реЗ рд╣реБрдП рд╣реИрдВ!", рдХреЛрдИ рднреА рдЖрдкрдХреЛ рдЙрд╕ рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдкрд░реЗрд╢рд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдкрд╕рдВрдж рд╣реИред рдЕрдкрдиреЗ рдЖрдк рд╕реЗ, рдореИрдВ рдпрд╣ рдЬреЛрдбрд╝ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рд╣рд╛рд╕реНрдХреЗрд▓ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡рд┐рдХрд╛рд╕ рдХреЛ рд╕рд░рд▓ рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рдХреЛрдб рдХреЛ рдЕрдзрд┐рдХ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред рдЗрд╕реЗ рдпрд╛ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рддрд░реАрдХрд╛ рд╣рд╛рд╕реНрдХреЗрд▓ рдореЗрдВ рд▓рд┐рдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдирд╛ рд╣реИ!
рдЖрдЧреЗ рдХрд╣рд╛рдБ рдЬрд╛рдирд╛ рд╣реИ
рдЖрдЧреЗ рдХреЗ рдЕрдзреНрдпрдпрди рдХреЗ рд▓рд┐рдП,
рдпрд╛ рдЗрд╕ рд▓реЗрдЦ рдХреЗ рдмрдЬрд╛рдп, рд╣рдо
рдЗрд╕ рд▓реЗрдЦ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ "рд╣реИрд╕реНрдХреЗрд▓ рд╕реЗ рдирд░рдо рдкрд░рд┐рдЪрдп" (6), рдФрд░ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЗрд╕рдХрд╛ рдЕрдиреБрд╡рд╛рдж (7)ред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ, рдХреЛрдИ рдЕрдиреНрдп рд▓реЗрдЦ рдЙрдкрдпреБрдХреНрдд рд╣реИрдВ (8)ред рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЧрд╛рдЗрдб рд▓рд┐рдЦреЗ рдЧрдП рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡реЗ рд╕рднреА рдЕрд▓рдЧ-рдЕрд▓рдЧ рджреГрд╖реНрдЯрд┐рдХреЛрдгреЛрдВ рд╕реЗ рд╕рдорд╛рди рдЪреАрдЬреЛрдВ рдХреЛ рд╕рдордЭрд╛рддреЗ рд╣реИрдВред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рд░реВрд╕реА рдореЗрдВ рдмрд╣реБрдд рдХрдо рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдореИрдиреБрдЕрд▓ рдХреА рдкреНрд░рдЪреБрд░рддрд╛ рдХреЗ рдмрд╛рд╡рдЬреВрдж, рднрд╛рд╖рд╛ рд╕рд░рд▓ рд╣реИ, рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд╡рд┐рд╡рд░рдг рдХреЗ рд╕рд╛рде рдЗрд╕рдХрд╛ рд╡рд┐рд╡рд░рдг рдХреЗрд╡рд▓ 270 рдкреГрд╖реНрда (9) рд▓реЗрддрд╛ рд╣реИред
рдмрд╣реБрдд рд╕рд╛рд░реА рдЬрд╛рдирдХрд╛рд░реА рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд▓рд┐рдП рджрд╕реНрддрд╛рд╡реЗрдЬ рдореЗрдВ рднреА рдирд┐рд╣рд┐рдд рд╣реИ (10)ред
рдореБрдЭреЗ рдЦреБрд╢реА рд╣реЛрдЧреА рдЕрдЧрд░ рд▓реЗрдЦ рдХрд┐рд╕реА рдХреА рдорджрдж рдХрд░рддрд╛ рд╣реИ рдпрд╛ рд╕рд┐рд░реНрдл рджрд┐рд▓рдЪрд╕реНрдк рд▓рдЧрддрд╛ рд╣реИ, рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдФрд░ рдЖрд▓реЛрдЪрдирд╛ рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИред
Ps рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рд╣рд╛рд╕реНрдХреЗрд▓ рджреБрдирд┐рдпрд╛ рдореЗрдВ "рдЯрд╛рдЗрдк рдмрд┐рд▓реНрдбрд░" рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрд╕реЗ "
рдЯрд╛рдЗрдк рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ " рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдУрдУрдкреА рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛ "рдбрд┐рдЬрд╛рдЗрдирд░" рд╢рдмреНрдж рдХреЗ рдЕрд░реНрде рдХреЛ рднреВрд▓рдирд╛ рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпреЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рдЪреАрдЬреЗрдВ рд╣реИрдВред рд╕реНрдерд┐рддрд┐ рдЗрд╕ рддрдереНрдп рд╕реЗ рдЬрдЯрд┐рд▓ рд╣реИ рдХрд┐ рдкреНрд░рдХрд╛рд░ рдХреЗ рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛рдУрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдРрд╕реЗ
рдбреЗрдЯрд╛ рдирд┐рд░реНрдорд╛рддрд╛ рднреА рд╣реИрдВ рдЬрд┐рдирдХрд╛ рдУрдУрдкреА рд╕реЗ рдХреЛрдИ рд▓реЗрдирд╛-рджреЗрдирд╛ рдирд╣реАрдВ рд╣реИред
рд╕рдВрджрд░реНрдн
- www.haskell.org/haskellwiki/Monad_tutorials_timeline
- http://en.wikipedia.org/wiki/Monad_(category_theory)
- hackage.haskell.org/platform
- habrahabr.ru/blogs/Haskell/80396
- www.haskell.org/haskellwiki/Avoiding_IO
- www.haskell.org/tutorial
- www.rsdn.ru/article/haskell/haskell_part1.xml
- www.haskell.org/haskellwiki/Tutorials
- www.haskell.org/definition/haskell98-report.pdf
- www.haskell.org/ghc/docs/7.0.3/html/libraries
рдЕрдкрдбреЗрдЯ: (SPOILER!)
рдЬреИрд╕рд╛ рдХрд┐ рдореБрдЭреЗ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рдВрдХреЗрдд рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдореЛрдирдбреНрд╕ рдкрд░ рдореИрдиреБрдЕрд▓ рдХреЗ рд▓рд┐рдП рдирд╛рдо рдХрд╛ рд╡рд┐рдХрд▓реНрдк рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдлрд▓ рдирд╣реАрдВ рд╣реИред рдЪреВрдВрдХрд┐ рднрд┐рдХреНрд╖реБрдУрдВ рдХреЗ рд╡рд┐рд╖рдп рдХрд╛ рдЦреБрд▓рд╛рд╕рд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕рдордЭ рдХреА рднрд╛рд╡рдирд╛ рдмрдиреА рд╣реБрдИ рд╣реИред
рддреЛ, рд╢рдмреНрдж "рдореЛрдирд╛рдб" рдСрдкрд░реЗрдЯрд░реЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╣реИ
>>= >> return fail
рдФрд░ рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХрд╛ рдбреЗрдЯрд╛ рдЬрд┐рд╕ рдкрд░ рд╡реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдИрдУред
рдЗрд╕ рд╢рдмреНрдж рдХреЗ рдЖрд╕рдкрд╛рд╕, рдПрдХ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рдЖрднрд╛ рд╡рд┐рдХрд╕рд┐рдд рдирд╣реАрдВ рд╣реБрдИ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕рдХрд╛ рдХреЛрдИ рдЧреБрдкреНрдд рдЕрд░реНрде рдирд╣реАрдВ рд╣реИред рдпрд╣ рдмрд╕ рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдкреИрдЯрд░реНрди рдХрд╛ рдирд╛рдо рд╣реИ, рдЬрд┐рд╕реЗ
рдмрд┐рдирд╛ рдореЛрдирд╛рдб рдХреЗ рд╕рдордЭрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
upd2:
рдЕрдлрд┐рд╕рди рдиреЗ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдкреНрд░рд╕реНрддреБрддрд┐ рдХрд╛ рд▓рд┐рдВрдХ рджрд┐рдпрд╛
рд╣рд╛рд╕реНрдХреЗрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ ред