рд╣рд╛рд╕реНрдХреЗрд▓ рдХреНрд╡реЗрд╕реНрдЯ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ - рд╣реЙрд▓

рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рдпрд╣ рд╕рдордп рдкрд░ рдкреНрд░рдХрд╛рд╢рд┐рдд рдЕрдВрддрд┐рдо рднрд╛рдЧ рд╣реИред рдореЗрд░реА рдЫреБрдЯреНрдЯреА рд▓рдЧрднрдЧ рдЦрддреНрдо рд╣реЛ рдЧрдИ рд╣реИ, рдФрд░ рдЕрдм рдПрдХ рд╕рдкреНрддрд╛рд╣ рдПрдХ рд▓реЗрдЦ рд▓рд┐рдЦрдирд╛ рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рд╣реЛрдЧрд╛ред рд╕рднреА рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж рдЬреЛ рд╣рд╛рд╕реНрдХреЗрд▓ рдХреНрд╡реЗрд╕реНрдЯ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рдереЗ!

рд▓рд┐рд╡рд┐рдВрдЧ рд░реВрдо
рдЖрдк рд▓рд┐рд╡рд┐рдВрдЧ рд░реВрдо рдореЗрдВ рд╣реИрдВред рдкреВрд░реНрд╡ рдХреА рдУрд░ рдПрдХ рджреНрд╡рд╛рд░ рд╣реИ, рдкрд╢реНрдЪрд┐рдо рдореЗрдВ рдЕрдЬреАрдм рдЧреЙрдерд┐рдХ рдХреЗ рд╕рд╛рде рдПрдХ рд▓рдХрдбрд╝реА рдХрд╛ рджрд░рд╡рд╛рдЬрд╛ рд╣реИ, рдЬреЛ рдиреЗрд▓ рдмрдВрдж, рдПрдХ рдЯреНрд░реЙрдлреА рдХрд╛ рдорд╛рдорд▓рд╛ рд╣реИ, рдФрд░ рдХрдорд░реЗ рдХреЗ рдХреЗрдВрджреНрд░ рдореЗрдВ рдПрдХ рдмрдбрд╝реЗ рдкреНрд░рд╛рдЪреНрдп рдЧрд▓реАрдЪрд╛ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИред
рдЯреНрд░реЙрдлреА рдорд╛рдорд▓реЗ рдХреЗ рдКрдкрд░ рдорд╣рд╛рди рдкреБрд░рд╛рддрдирддрд╛ рдХреА рдПрдХ рдПрд▓реНрд╡рд┐рд╢ рддрд▓рд╡рд╛рд░ рд▓рдЯрдХреА рд╣реБрдИ рд╣реИред
рдПрдХ рдмреИрдЯрд░реА рдЪрд╛рд▓рд┐рдд рдкреАрддрд▓ рд▓рд╛рд▓рдЯреЗрди рдЯреНрд░реЙрдлреА рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд╣реИред


рд╕рд╛рдордЧреНрд░реА:
рдЧреНрд░реАрдЯрд┐рдВрдЧ
рднрд╛рдЧ 1 - рдЖрдЧреЗ
рднрд╛рдЧ 2 - рд╡рди
рднрд╛рдЧ 3 - рдкреЛрд▓реАрдирд╛
рднрд╛рдЧ 4 - рдШрд╛рдЯреА рдХрд╛ рджреГрд╢реНрдп
рднрд╛рдЧ 5 - рд╣реЙрд▓

рднрд╛рдЧ 5
рдЬрд┐рд╕рдореЗрдВ рд╣рдо рдПрдХ рдЫреЛрдЯреА рд╕реА рддреНрд░реБрдЯрд┐ рд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВрдЧреЗ, рдФрд░ рдлрд┐рд░ рдЦреЗрд▓ рдореЗрдВ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдЬреЛрдбрд╝ рджреЗрдВрдЧреЗред


рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдорд╛рд░реА рд╕реНрдореГрддрд┐ рдХреЛ рддрд╛рдЬрд╝рд╛ рдХрд░реЗрдВред рдЪрд▓рд┐рдП рдЪрд▓рддреЗ рд╣реИрдВ рдлрдВрдХреНрд╢рди рдкрд░, рдЬреЛ рд╣рдореЗрдВ рдЪреМрдереЗ рднрд╛рдЧ рдореЗрдВ рдорд┐рд▓рд╛ред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдореИрдВрдиреЗ рдЖрдкрдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд┐рдпрд╛, рд▓реБрдХ рдПрдХреНрд╢рди рдЬреЛрдбрд╝рд╛ред рд░рди рдлрд╝рдВрдХреНрд╢рди рдЕрдм рдкреНрд░рднрд╛рд╡рд╢рд╛рд▓реА рджрд┐рдЦрддрд╛ рд╣реИ:

рджреМрдбрд╝рдирд╛ curLoc = рдХрд░рдирд╛
putStrLn ( рд╡рд░реНрдгрди рдХрд░реНрд▓реЛрдХ )
putStr "рдХрдорд╛рдВрдб рджрд░реНрдЬ рдХрд░реЗрдВ:"
x <- рдЧреЗрдЯрд▓рд╛рдЗрди
рдорд╛рдорд▓рд╛ ( ConvertStringToAction x ) рдХрд╛
рдЫреЛрдбрд╝реЛ -> putStrLn " рддреБрдордХреЛ рджреЗрдЦрд╛ ..."
рджреЗрдЦреЛ -> рдХрд░рддреЗ рд╣реИрдВ
putStrLn ( рд╡рд░реНрдгрди рдХрд░реНрд▓реЛрдХ )
рдХрд░реНрд▓реЛрдХ рдЪрд▓рд╛рдПрдВ
рдЧреЛ рджрд┐рд░ -> рдХрд░реЛ
putStrLn ( " \ n рдЖрдк рдЪрд▓рдиреЗ рдХреЗ рд▓рд┐рдП" ++ рд╢реЛ dir ++ "ред \ n " )
рд░рди ( рд╡реЙрдХ рдХрд░реНрд▓реЛрдХ рджрд┐рд░ )
ConvertResult -> рдХрд░рддреЗ рд╣реИрдВ
putStrLn ( evalAction ConvertResult )
putStrLn "рдмрд╛рд░реА рдХрд╛ рдЕрдВрддред \ n "
рдХрд░реНрд▓реЛрдХ рдЪрд▓рд╛рдПрдВ


рдЕрдВрддрд┐рдо рднрд╛рдЧ рдХреЗ рдЯрд╛рд╕реНрдХ рдирдВрдмрд░ 2 рдореЗрдВ, рджреЛ рдХреЙрд▓ "(рд╡рд░реНрдгрди рдХрд░реНрд▓реЛрдХ)" рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдерд╛ред рдмреЗрд╢рдХ, рд╣рдо рдПрди рдирд┐рдХрд╛рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЧреБрд░реБрддреНрд╡рд╛рдХрд░реНрд╖рдг рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдПрдХ рдЫреЛрдЯреЗ рд╕реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЗ рд▓рд┐рдП рд▓рдбрд╝ рд╕рдХреЗрдВ, рд▓реЗрдХрд┐рди рдХрдИ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкрд░рд┐рдгрд╛рдо рдЗрд╕ рдорд╣рддреНрд╡ рдХрд╛ рдкрд╛рд▓рди рдХрд░рддреЗ рд╣реИрдВред рдпрджрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдЕрдирд┐рд╡рд╛рд░реНрдп рднрд╛рд╖рд╛ рд╣реИ, рддреЛ рд╣рдо рдкрд░рд┐рдгрд╛рдо рдХреЛ рдПрдХ рдЪрд░ рдХреЗ рд▓рд┐рдП рдЖрд╡рдВрдЯрд┐рдд рдХрд░реЗрдВрдЧреЗред рд╣рд╛рд╕реНрдХреЗрд▓ рдореЗрдВ, рдбреЗрдЯрд╛ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдРрд╕рд╛ рдХреЛрдИ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдирд╣реАрдВ рд╣реИред рд▓реЗрдХрд┐рди рдРрд╕реЗ рдЕрдиреНрдп рддрдВрддреНрд░ рд╣реИрдВ, рдЬреЛ рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рдмрддрд╛рддреЗ рд╣реИрдВ, рди рдХреЗрд╡рд▓ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рдХрд░рддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдЕрдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╕реНрдерд┐рддрд┐ рдХреЛ рднреА рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддрд╛ рд╣реИ, рджрд┐рд▓рдЪрд╕реНрдк рдкреНрд░рднрд╛рд╡ рджреЗрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдирд┐рд╖реНрдкрд╛рджрди рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдгрд╡рд╛рджред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрджрд┐ рдХреБрдЫ рд╡реИрд╢реНрд╡рд┐рдХ рд╕реНрдерд┐рддрд┐ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рддреА рд╣реИ, рдФрд░ рдЗрд╕рдХреЗ рдЕрдВрджрд░ рдбреЗрдЯрд╛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЕрдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╣реИ, рддреЛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдпрд╣ рд╕рдорд╛рди рдорд╛рдиреЛрдВ рдХреЛ рд╕рдорд╛рди рддрд░реНрдХреЛрдВ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░ рджреЗрдЧрд╛ред рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдПрдХ рдмрд╛рд░ рдХреЙрд▓ рдХрд░рдХреЗ, рд╣рдо рдЗрд╕рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдФрд░ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдпрд╛рдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЕрдЧрд░ рд╣рдореЗрдВ рдЗрд╕реЗ рдЙрд╕реА рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рджреВрд╕рд░реА рдмрд╛рд░ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рд╣рдо рдХреЗрд╡рд▓ рдкрд╣рд▓реЗ рдЧрдгрдирд╛ рдХрд┐рдП рдЧрдП рдкрд░рд┐рдгрд╛рдо рдХреЛ рд╡рд╛рдкрд╕ рдХрд░ рджреЗрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рд╣реИрдВред

рд▓реЗрдХрд┐рди рдЪрд▓реЛ рд╡реНрдпрд╛рдкрд╛рд░ рдХреЗ рд▓рд┐рдП рдиреАрдЪреЗ рдЙрддрд░реЛред рд╣рдорд╛рд░реА рд╕рдорд╕реНрдпрд╛ рдХреЗ рдХрдИ рд╕рдорд╛рдзрд╛рди рд╣реИрдВред рдкрд╣рд▓реЗ, рдЖрдЗрдП, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкрд░рд┐рдгрд╛рдо рдХреЛ рдХреБрдЫ рдЪрд░ рдХреЗ рд╕рд╛рде рд╕рдВрдмрджреНрдз рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрд╕реА рддрд░рд╣ рдЬреИрд╕реЗ рд╣рдордиреЗ рдЧреЗрдЯрд▓рд╛рдЗрди рдФрд░ рдЪрд░ x рд╕реЗ рд░реЗрдЦрд╛ рдХреЛ рдЬреЛрдбрд╝рд╛ рд╣реИред рдпрд╣ рдПрдХ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдХреЗ рд╕рдорд╛рди рд╣реИ, рдФрд░ рдпрд╣рд╛рдВ рд╡рд┐рдЪрд╛рд░ рд╕рд░рд▓ рд╣реИ: рдЖрдк рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЙрддрдирд╛ рд╣реА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рддрдирд╛ рдЖрдкрдХреЛ рдЬрд░реВрд░рдд рд╣реИред рдкрд╣рд▓реА рдХреЙрд▓ рд╕реЗ рдЖрдкрдХреЛ рд▓рдЧрднрдЧ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдорд┐рд▓рддреЗ рд╣реИрдВ:

рджреМрдбрд╝рдирд╛ curLoc = рдХрд░рдирд╛
locDescr <- рд╡рд░реНрдгрди рдХрд░реНрд▓реЛрдХ
putStrLn locDescr
putStr "рдХрдорд╛рдВрдб рджрд░реНрдЬ рдХрд░реЗрдВ:"
x <- рдЧреЗрдЯрд▓рд╛рдЗрди
рдорд╛рдорд▓рд╛ ( ConvertStringToAction x ) рдХрд╛
... - рд╢реЗрд╖ рдХреЛрдб


рд▓реЗрдХрд┐рди рдпрд╣ рдХреЛрдб рдПрдХ рдЪрд╛рд▓ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЕрдм рд╕рдВрдХрд▓рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

* рдореБрдЦреНрдп: рдЖрд░
[ реи рдХрд╛ реи ] рдореБрдЦреНрдп рд╕рдВрдХрд▓рди ( H: \ Haskell \ QuestTutorial \ Quest \ QuestMain ред Hs , рд╡реНрдпрд╛рдЦреНрдпрд╛ )

H: \ Haskell \ QuestTutorial \ рдХреНрд╡реЗрд╕реНрдЯ \ QuestMain ред hs: 58 : 17 :
рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкреНрд░рдХрд╛рд░ ' IO ( ) ' рдХреЗ рд╕рд╛рде рдЕрдкреЗрдХреНрд╖рд┐рдд рдкреНрд░рдХрд╛рд░ ' [a ]] рдХрд╛ рдорд┐рд▓рд╛рди рдирд╣реАрдВ рд╣реЛ рд╕рдХрд╛
' PutStrLn ' рдХреЗ рдХреЙрд▓ рдХреЗ рд░рд┐рдЯрд░реНрди рдкреНрд░рдХрд╛рд░ рдореЗрдВ
' Do ' рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рдХреЗ рдПрдХ рд╕реНрдЯрдореНрдЯ рдореЗрдВ : putStrLn locDescr
рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдореЗрдВ:
...

рд╡рд┐рдлрд▓ , рд▓реЛрдб рдХрд┐рдП рдЧрдП рдореЙрдбреНрдпреВрд▓: рдкреНрд░рдХрд╛рд░ ред


"X <- getLine" рдФрд░ "locDescr <- descriptionLocation curLoc" рдореЗрдВ рдХреНрдпрд╛ рдЕрдВрддрд░ рд╣реИ? рдпрд╣ рдПрдХ рд╣реА рдмрд╛рдд рд▓рдЧрддреА рд╣реИ: рдЧреЗрдЯрд▓рд╛рдЗрди рдлрд╝рдВрдХреНрд╢рди рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рджреЗрддрд╛ рд╣реИ рдЬреЛ рдЪрд░ x рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ; рдФрд░ рдлрд╝рдВрдХреНрд╢рди (рдбрд┐рд╕реНрдХреНрд░реИрдХреНрд▓реЛрдХреЗрд╢рди рдХрд░реНрд▓реЛрдХ) рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рднреА рд▓реМрдЯрд╛рддрд╛ рд╣реИ рдЬреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рд▓реЛрдХрдбреНрд░реЗрд╕ рдЪрд░ рдкрд░ рдмрд╛рдВрдзрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рджреБрднрд╛рд╖рд┐рдпрд╛ рдХрд╣рддрд╛ рд╣реИ рдХрд┐ рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддреЗ рд╣реИрдВред рдЖрдЗрдП рд╕реНрдерд┐рддрд┐ рдХреЛ рджреЗрдЦреЗрдВ - рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдпрд╣ рд╕рдордЭрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рд░рди рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИред

рдЖрдЗрдП рддреНрд░реБрдЯрд┐рдкреВрд░реНрдг рд░реЗрдЦрд╛рдУрдВ рдкрд░ рдЯрд┐рдкреНрдкрдгреА рдХрд░рддреЗ рд╣реБрдП рд╡рд╛рдкрд╕ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреЛрдб рдкрд░ рдЬрд╛рдПрдВред

рджреМрдбрд╝рдирд╛ curLoc = рдХрд░рдирд╛
- рд▓реЛрдХрдбреНрд░реЗрд╕ <- рд╡рд░реНрдгрдирд▓реЛрдХрд▓реЛрдХ
- putStrLn locDescr
putStr "рдХрдорд╛рдВрдб рджрд░реНрдЬ рдХрд░реЗрдВ:"
x <- рдЧреЗрдЯрд▓рд╛рдЗрди
рдорд╛рдорд▓рд╛ ( ConvertStringToAction x ) рдХрд╛
... - рд╢реЗрд╖ рдХреЛрдб

* рдкреНрд░рдХрд╛рд░ > : рдЖрд░
[ реи рдХрд╛ реи ] рдореБрдЦреНрдп рд╕рдВрдХрд▓рди ( H: \ Haskell \ QuestTutorial \ Quest \ QuestMain ред Hs , рд╡реНрдпрд╛рдЦреНрдпрд╛ )
рдареАрдХ рд╣реИ , рдореЙрдбреНрдпреВрд▓ рд▓реЛрдб рдХрд┐рдП рдЧрдП: рдореБрдЦреНрдп , рдкреНрд░рдХрд╛рд░ ред
* рдореБрдЦреНрдп рдпрд╛


рд╣рдордиреЗ рдЬрд╛рдирдмреВрдЭрдХрд░ рд░рди рдлрд╝рдВрдХреНрд╢рди рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдирд╣реАрдВ рд▓рд┐рдЦреА рд╣реИ, рддрд╛рдХрд┐ рдЗрд╕рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреА рдЬрдЯрд┐рд▓рддрд╛рдУрдВ рдореЗрдВ рди рдЬрд╛рдПрдВред рд▓реЗрдХрд┐рди рдЙрд╕рдХреЗ рдкрд╛рд╕ рдПрдХ рдкреНрд░рдХрд╛рд░ рд╣реИ, рдФрд░ рд╕рдВрдХрд▓рдХ рдЗрд╕реЗ рд╕реНрд╡рдпрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ:

* рдореБрдЦреНрдп: рдЯреА рд░рди
рд░рди :: рд╕реНрдерд╛рди -> IO ( )


рдФрд░ рдпрд╣рд╛рдВ рдПрдХ рдЖрд╢реНрдЪрд░реНрдп рд╣рдореЗрдВ рдЗрдВрддрдЬрд╛рд░ рдХрд░ рд░рд╣рд╛ рд╣реИред рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рд╕реНрдерд╛рди рдПрдХ рдПрдХрд▓ рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдкреНрд░рдХрд╛рд░ рд╣реИ, рдФрд░ рдЕрдЬреАрдм рдкреНрд░рдХрд╛рд░ IO () рдХреЗ рд▓рд┐рдП, рд╡рд╛рдкрд╕реА рдореВрд▓реНрдп рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреБрдЫ рднреА рдирд╣реАрдВ рдмрдЪрд╛ рд╣реИред рдмрд╣реБрдд рджрд┐рд▓рдЪрд╕реНрдк! рдЖрдЦрд┐рд░, рд╣рдо рдХрд╣реАрдВ рднреА рдХрд┐рд╕реА рднреА IO () рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдпрд╣ рдХрд╣рд╛рдВ рд╕реЗ рдЖрдпрд╛ рд╣реИ? рдпрджрд┐ рдЖрдк рд╣рд╛рд╕реНрдХреЗрд▓ рдХреЛ рдЙрд╕рдХреЗ рдХрд╛рд▓реЗ рдХрд╛рдореЛрдВ рдФрд░ рдордирдорд╛рдиреА рдХреЗ рд▓рд┐рдП рджреЛрд╖реА рдард╣рд░рд╛рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЬрд▓реНрджрдмрд╛рдЬреА рди рдХрд░реЗрдВ: IO рд╣рдо рдЗрд╕рдХрд╛ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рд╣рд╛рд╕реНрдХреЗрд▓ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдХрд┐рд╕реА рднреА рдЗрдирдкреБрдЯ-рдЖрдЙрдЯрдкреБрдЯ (I / O) рдХрд╛рд░реНрд░рд╡рд╛рдИ рдПрдХ рд╕рдВрднрд╛рд╡рд┐рдд рддреНрд░реБрдЯрд┐ рдФрд░ рдЦрд░рд╛рдмреА рд╣реИ, рдЬрд┐рд╕реЗ "рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯреНрд╕" рдХреЗ рд░реВрдк рдореЗрдВ рднреА рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЗрдирдкреБрдЯ-рдЖрдЙрдЯрдкреБрдЯ рдлрд╝рдВрдХреНрд╢рдВрд╕ (putStrLn, putStr, putChar, getLine, getChar, readFile, writeFile) рдЦрддрд░рдирд╛рдХ рд╣реИрдВ, рд╡реЗ рдПрдХ рд╣реА рддрд░реНрдХреЛрдВ рдкрд░ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкрд░рд┐рдгрд╛рдо рджреЗ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╡реЗ рдПрдХ рддреНрд░реБрдЯрд┐ рднреА рдлреЗрдВрдХ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рд╡реЗ рдкреНрд░рдХрд╛рд░ IO рдХреЗ рд╣реИрдВ, рдЬреЛ рднрд╛рд╖рд╛ рдХреА рд░рд╛рдп рдореЗрдВ, рд╣рдореЗрдВ рдЪрд┐рдВрддрд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рдЕрдиреНрдп рд╕рднреА рдХрд╛рд░реНрдп рдЬрд┐рдирдХреЗ рдЕрдВрджрд░ рдПрдХ IO рдкреНрд░рдХрд╛рд░ рд╣реИ, рдЧреИрд░-рдирд┐рдпрддрд╛рддреНрдордХ рднреА рдмрди рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЗрд╕реЗ рдЕрдкрдирд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╣рдорд╛рд░реЗ рд░рди рдлрд╝рдВрдХреНрд╢рди рдиреЗ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЪреБрдирд╛, рдпрд╣реА рд╡рдЬрд╣ рд╣реИ рдХрд┐ рдпрд╣ IO () рдкреНрд░рдХрд╛рд░ рд╕реЗ рд╕рдВрдХреНрд░рдорд┐рдд рд╣реЛ рдЧрдпрд╛ред рдпрд╣ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╣реИ, рдХрд┐ рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдмрд┐рдВрджреБ - рдореБрдЦреНрдп рдХрд╛рд░реНрдп - рдЗрд╕ рднрд╛рдЧреНрдп рд╕реЗ рдмрдЪ рдирд╣реАрдВ рдЧрдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рд░рди рдХреЛ рдЗрд╕рдореЗрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред

* рдореБрдЦреНрдп: рдЯреА рдореБрдЦреНрдп
рдореБрдЦреНрдп :: IO ( )


рдирд┐рд╖реНрдкрдХреНрд╖рддрд╛ рдореЗрдВ, рдпрд╣ рдХрд╣рдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдореЗрдВ рдпрд╣ рдзрд╛рд░рдгрд╛ рдмрдирд╛рдИ рдЧрдИ рд╣реИ рдХрд┐ IO рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рд░реНрдп рдЧреИрд░-рдирд┐рдпрддрд╛рддреНрдордХ рд╣реИрдВред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдЪ рдирд╣реАрдВ рд╣реИ; рдФрд░ рдПрдХ рдЕрд░реНрде рдореЗрдВ рдРрд╕реЗ рдХрд╛рд░реНрдп рдирд┐рд░реНрдзрд╛рд░рдХ рдФрд░ рд╢реБрджреНрдз рднреА рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рд╕рд╡рд╛рд▓, рдЖрдо рддреМрд░ рдкрд░ рдмреЛрд▓ рд░рд╣рд╛ рд╣реИ, рд╣рд╛рд╕реНрдХреЗрд▓ рдХреА рдкрд╡рд┐рддреНрд░рддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣рд╕ рдореЗрдВ рдПрдХ рдареЛрдХрд░ рд╣реИ, рдФрд░ рдЗрд╕рдХреА рдЪрд░реНрдЪрд╛ рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдкрд╛рдИ рдЬрд╛ рд╕рдХрддреА рд╣реИред


рдЙрдкрд░реЛрдХреНрдд рд╣рдорд╛рд░реА рд╕рдорд╕реНрдпрд╛ рд╕реЗ рдХреИрд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ? рдЪрд▓реЛ рдЧрд▓рдд рдХреЛрдб рдкрд░ рдлрд┐рд░ рд╕реЗ рджреЗрдЦреЗрдВ (рд╕рдВрдХрд▓рди рдХреЗ рдмрд┐рдирд╛), рдЗрд╕реЗ рдЕрд╕рд╛рдЗрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдСрд░реНрдбрд░ рдХреЗ рд▓рд┐рдП, рд░рди рдлрд╝рдВрдХреНрд╢рди рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ред

рд░рди :: рд╕реНрдерд╛рди -> IO ( )
рджреМрдбрд╝рдирд╛ curLoc = рдХрд░рдирд╛
locDescr <- рд╡рд░реНрдгрди рдХрд░реНрд▓реЛрдХ
putStrLn locDescr
putStr "рдХрдорд╛рдВрдб рджрд░реНрдЬ рдХрд░реЗрдВ:"
x <- рдЧреЗрдЯрд▓рд╛рдЗрди
рдорд╛рдорд▓рд╛ ( ConvertStringToAction x ) рдХрд╛
... - рд╢реЗрд╖ рдХреЛрдб


рдХреАрд╡рд░реНрдб, рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ, рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рдЬреЛрдбрд╝рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреЛрдИ рднреА рдирд╣реАрдВред do- рд╕рдВрдХреЗрддрди рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреА рд╕рднреА рдХреНрд░рд┐рдпрд╛рдПрдВ рдПрдХ рд╣реА рдкреНрд░рдХрд╛рд░ рдХреА рд╣реЛред рдЪреВрдВрдХрд┐ рд╣рдо I / O рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдкреНрд░рдХрд╛рд░ рдореЗрдВ IO рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

* рдореБрдЦреНрдп: рдЯреА putStrLn
putStrLn :: рд╕реНрдЯреНрд░рд┐рдВрдЧ -> IO ( )

* рдореБрдЦреНрдп: рдЯреА рдкреБрдЯрд╕реНрдЯреНрд░
putStr :: рд╕реНрдЯреНрд░рд┐рдВрдЧ -> IO ( )


рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рддрд░реНрдХ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрди рджреЛ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рдПрдХ рд╣реА рд░рд┐рдЯрд░реНрди рдкреНрд░рдХрд╛рд░ рд╣реИ - IO ()ред рдпрд╣рд╛рдВ рдЦрд╛рд▓реА рдХреЛрд╖реНрдардХ рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдХреБрдЫ рднреА рдЙрдкрдпреЛрдЧреА рдирд╣реАрдВ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ рдХрд┐ рдкреБрдЯрд╕реНрдЯреНрд░рд▓ рдХреНрдпрд╛ рд░рд┐рдЯрд░реНрди рджреЗрддрд╛ рд╣реИ, рдЕрдЧрд░ рдХреЗрд╡рд▓ рдпрд╣ рдХрдВрд╕реЛрд▓ рдореЗрдВ рдЕрдкрдиреЗ рддрд░реНрдХ рдХреЛ рдкреНрд░рд┐рдВрдЯ рдХрд░реЗрдЧрд╛ред рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд, рд╣рдо getLine рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рдХреБрдЫ "рдЙрдкрдпреЛрдЧреА" рдХреА рдЙрдореНрдореАрдж рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдпрд╣ рдЕрдкрдиреЗ рдкреНрд░рдХрд╛рд░ рд╕реЗ рдЕрдкрдиреЗ рддрд░реАрдХреЗ рд╕реЗ рдкрд░рд┐рд▓рдХреНрд╖рд┐рдд рд╣реЛрддрд╛ рд╣реИ:

* рдореБрдЦреНрдп: рдЯреА getLine
getLine :: IO рд╕реНрдЯреНрд░рд┐рдВрдЧ


getLine рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реЗ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдПрдХ рдЙрдкрд╣рд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ, IO рдкреНрд░рдХрд╛рд░ рдореЗрдВ рдкреИрдХ рдХрд░рддрд╛ рд╣реИред рдФрд░ рдЬреЛ рдЖрдк рдЙрдкрд╣рд╛рд░ рдХреЗ рд╕рд╛рде рдЪрд╛рд╣рддреЗ рд╣реИрдВ рд╡рд╣ рдХрд░реЗрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рдЗрд╕реЗ ConvertStringToAction рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ:

...
x <- рдЧреЗрдЯрд▓рд╛рдЗрди
рдорд╛рдорд▓рд╛ ( ConvertStringToAction x ) рдХрд╛
...


рд▓реЗрдХрд┐рди ConvertStringToAction рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдПрдХ рдЕрд▓рдЧ рдкреНрд░рдХрд╛рд░ рд╣реИ! - рдЖрдкрдХрд╛ рдзрдиреНрдпрд╡рд╛рдж рдФрд░ рдЖрдк рд╕рд╣реА рд╣реЛрдВрдЧреЗред рд╡рд╣ рдЗрдирдкреБрдЯ рдкрд░ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХрд╛ рдЗрдВрддрдЬрд╛рд░ рдХрд░ рд░рд╣реА рд╣реИ, рдЖрдИрдУ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХрд╛ рдирд╣реАрдВ! рдЪрд╛рд▓ рдХреНрдпрд╛ рд╣реИ? рдЦреИрд░, рдЗрди рджреЛ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдореЗрдВ рдХрд╣реАрдВ рди рдХрд╣реАрдВ рдЙрдкрд╣рд╛рд░ рд╕рд╛рдордиреЗ рдЖрддрд╛ рд╣реИ, рдЖрдИрдУ рдмреЙрдХреНрд╕ рдХреЛ рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЦрд╛рд▓реА рд▓рд╛рдЗрди рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЪрд▓рддреА рд░рд╣рддреА рд╣реИред рдФрд░ рдпрд╣ рддреАрд░ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рджрд╛рдИрдВ рдУрд░ рд╕реЗ рдкреИрдХреНрдб рдкрд░рд┐рдгрд╛рдо рд▓реЗрддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдмрд╛рдИрдВ рдУрд░ рдПрдХ рдЪрд░ рдореЗрдВ рдЦреЛрд▓ рджреЗрддрд╛ рд╣реИред рдЗрд╕реАрд▓рд┐рдП, рд╡реИрд╕реЗ, рдЗрд╕ рдСрдкрд░реЗрд╢рди рдХреЛ рдмрд╛рдзреНрдпрдХрд╛рд░реА рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдирд╣реАрдВред рдФрд░ рдЕрдЧрд░ рдЖрдк рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрддреЗ рд╣реИрдВ, рддреЛ рд╣рдорд╛рд░реА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ "locDescr <- descriptionLocation curLoc" рдЧрд▓рдд рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╕рд╣реА рдкрдХреНрд╖ рдкрд░ рдХрд╣реАрдВ рднреА рдХреБрдЫ рднреА рдкреИрдХ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ - рдкрдврд╝реЗрдВ, рдкрд░рд┐рдгрд╛рдо IO рдмреЙрдХреНрд╕ рдореЗрдВ рдирд╣реАрдВ рдбрд╛рд▓рд╛ рдЧрдпрд╛ рд╣реИред

* рдореБрдЦреНрдп: рдЯреА ( рд╡рд░реНрдгрди рдШрд░ )
( рд╡рд░реНрдгрди рдШрд░ ) :: рд╕реНрдЯреНрд░рд┐рдВрдЧ


рдЦреИрд░, рдпрд╣рд╛рдБ рд╣рдо рд╣реИрдВ ... рд╣рдо рдЗрд╕реЗ рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдирд╛ рд╕рд░рд▓ рдЪрд╛рд╣рддреЗ рдереЗ, рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдХрдИ рдкрдиреНрдиреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рд╕ рддрд░рд╣ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓рд╛ред рд▓реЗрдХрд┐рди рдореЗрд░реЗ рдкрд╛рд╕ рдЖрдкрдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫреА рдЦрдмрд░ рд╣реИ: рдПрдХ рд╕рдорд╛рдзрд╛рди рд╣реИ! рд╣рдо рдЦреБрдж рдЯрд╛рдЗрдк I рдореЗрдВ рджрд╛рдИрдВ рдУрд░ рдХреНрдпрд╛ рдкреИрдХ рдХрд░реЗрдВрдЧреЗ, рдФрд░ рддреАрд░ рдХреЛ рдЪреЛрдХ рдХрд░ рджреЗрдВред рдЗрд╕рдХреЗ рд▓рд┐рдП рд░рд┐рдЯрд░реНрди рдлрдВрдХреНрд╢рди рд╣реИред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдЗрд░рд╛рджрд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХрд╛рдо рдХрд░реЗрдЧрд╛:

рд░рди :: рд╕реНрдерд╛рди -> IO ( )
рджреМрдбрд╝рдирд╛ curLoc = рдХрд░рдирд╛
locDescr <- рд╡рд╛рдкрд╕реА ( рд╡рд░реНрдгрди рд╡рд░реНрдгрди рдХрд░реНрд▓реЛрдХ )
putStrLn locDescr
putStr "рдХрдорд╛рдВрдб рджрд░реНрдЬ рдХрд░реЗрдВ:"
x <- рдЧреЗрдЯрд▓рд╛рдЗрди
рдорд╛рдорд▓рд╛ ( ConvertStringToAction x ) рдХрд╛
рдЫреЛрдбрд╝реЛ -> putStrLn " рддреБрдордХреЛ рджреЗрдЦрд╛ ..."
рджреЗрдЦреЛ -> рдХрд░рддреЗ рд╣реИрдВ
putStrLn locDescr
рдХрд░реНрд▓реЛрдХ рдЪрд▓рд╛рдПрдВ
... - рд╢реЗрд╖ рдХреЛрдб


рд╣рд╛рдВ, рд╡рд╛рдкрд╕реА рдлрд╝рдВрдХреНрд╢рди рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдбреВ (IO) рдмреНрд▓реЙрдХ рдкреНрд░рдХрд╛рд░ рдореЗрдВ рдкреИрдХ рдХрд░реЗрдЧрд╛, рдФрд░ рддреАрд░ рдЗрд╕реЗ рдЕрдирдкреИрдХ рдХрд░ рджреЗрдЧрд╛ рдФрд░ рдЗрд╕реЗ locDescr рдЪрд░ рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝ рджреЗрдЧрд╛ред рдФрд░ рдЖрдкрдХреЛ рдЕрдм рдХрдИ рдмрд╛рд░ рд╕реНрдерд╛рди рд╡рд┐рд╡рд░рдг рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рддрд░реНрдХ, рдмреЗрд╢рдХ, рдЕрд╕рд╛рдорд╛рдиреНрдп рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рд╕рд╣рдордд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП: рдЗрд╕рдореЗрдВ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреА рдЖрдВрддрд░рд┐рдХ рд╕реБрдВрджрд░рддрд╛ рд╣реИред рдпрд╣ рдПрдХ рдкреЗрдп рдХреЗ рд▓рд╛рдпрдХ рд╣реИ!

IO рдХреЗ do- рдЕрдВрдХрди рдФрд░ рдкреНрд░рдХрд╛рд░ рдХреЗ рдФрд░ рднреА рдЕрдзрд┐рдХ рдкрд░рд┐рдгрд╛рдо рдФрд░ рдиреБрдХрд╕рд╛рди рд╣реЛрддреЗ рд╣реИрдВред рдпрджрд┐ рд╣рдо рдЧрд╣рд░рд╛рдИ рд╕реЗ рдЦреБрджрд╛рдИ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рди рдХреЗрд╡рд▓ рджреБрд╖реНрдкреНрд░рднрд╛рд╡реЛрдВ рдХреЛ рджреВрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рддрд░реАрдХрд╛ рджреЗрдЦреЗрдВрдЧреЗ, рдмрд▓реНрдХрд┐ рдХрдИ рдЕрдиреНрдп рдЧрдгрдирд╛рдПрдВ рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдХрд┐ IO рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдХрд╛рдиреВрдиреЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╕рдВрдмрдВрдзрд┐рдд рд╣реЛ рд╕рдХрддреА рд╣реИрдВред рддрдерд╛рдХрдерд┐рдд рдордареЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЧрдгрдирд╛ рдХрд░рдирд╛, рд╣рдо рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рд░реВрдк рд╕реЗ рд╕рд░рд▓ рдФрд░ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рддрд░реНрдХ рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛрддреЗ рд╣реИрдВ, рдФрд░ рдХреЛрдб рд╕рдВрдХреНрд╖рд┐рдкреНрдд, рд╕рдордЭрдиреЗ рдпреЛрдЧреНрдп рдФрд░ рдЕрднрд┐рд╡реНрдпрдВрдЬрдХ рдмрди рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдРрд╕рд╛ рдХреЛрдб рд╕рдЦреНрддреА рд╕реЗ рдЧрдгрд┐рддреАрдп рдФрд░ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред рдпрд╣ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдпреЛрдВ рдЬреИрд╕реЗ рдкрд╛рд░реНрд╕рд┐рдВрдЧ, рдбреАрдПрд╕рдПрд▓, рдореНрдпреВрдЯреЗрдмрд▓ рд╕реНрдЯреЗрдЯреНрд╕ рдФрд░ рдмрд╣реБрдд рдХреБрдЫ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЙрдкрдпреБрдХреНрдд рд╣реИред рд╢рд╛рдпрдж рдХрд┐рд╕реА рджрд┐рди рд╣рдо рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рд▓реМрдЯреЗрдВрдЧреЗ - рд▓реЗрдХрд┐рди рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдирд╣реАрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред


рдЦреИрд░, рд╣рдордиреЗ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд┐рдпрд╛, рдЬреЛ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд░реВрдк рд╕реЗ рдХреИрдкреЗрд╕рд┐рдЯрд┐рд╡ рдирд┐рдХрд▓рд╛ред рддреЛ рд╣рдо рдХреНрдпреЛрдВ рддрдирд╛рд╡ рдФрд░ рдХреБрдЫ рдЕрдиреНрдп рд╕рдорд╛рдзрд╛рди рдХреЗ рд╕рд╛рде рдЖрдирд╛ рдЪрд╛рд╣рд┐рдП? рд╣рд╛рдВ, рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд╕рдорд╛рди рдХреЗ рд▓рд┐рдП: рд╣рд╛рд╕реНрдХреЗрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдФрд░ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдПред

рд╣рдорд╛рд░рд╛ рдЕрдЧрд▓рд╛ рд╕рдорд╛рдзрд╛рди рдЬрд╣рд╛рдВ рдирд┐рд░реНрдорд╛рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛ред рдпрд╣ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдирд┐рд░реНрдорд╛рдг рд╣реИ рдЬрд╣рд╛рдВ рдЖрдк рдЙрди рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдХреЗрд╡рд▓ рдпрд╣рд╛рдВ рдФрд░ рдЕрднреА рдЙрдкрд▓рдмреНрдз рд╣реИрдВ - рдЬреИрд╕реЗ рдХреБрдЫ рдЕрдиреНрдп рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдиреЗрд╕реНрдЯреЗрдб рдлрд╝рдВрдХреНрд╢рдиред рдЬрд╣рд╛рдВ рдмреНрд▓реЙрдХ рдХреЗ рдЕрдВрджрд░, рдкреЗрд░реЗрдВрдЯ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╡реИрд░рд┐рдПрдмрд▓ рдЙрдкрд▓рдмреНрдз рд╣реИрдВ, рдФрд░ рд╕рд╛рдзрд╛рд░рдг рдХрд╛рд░реНрдпреЛрдВ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рдХрд╛рдиреВрди рд▓рд╛рдЧреВ рд╣реЛрддреЗ рд╣реИрдВред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЖрдк рдПрдХ рд╣реА рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдХрдИ рд╡реЗрд░рд┐рдПрдВрдЯ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдкреИрдЯрд░реНрди рдорд┐рд▓рд╛рди, рд╕реБрд░рдХреНрд╖рд╛ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдиреЗрд╕реНрдЯреЗрдб рднреА рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ-рдирд┐рд░реНрдорд╛рдгред

рдЬрд╣рд╛рдВ рдирд┐рд░реНрдорд╛рдг рдХреЛ рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдмрд╕ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВ:

рд░рди :: рд╕реНрдерд╛рди -> IO ( )
рджреМрдбрд╝рдирд╛ curLoc = рдХрд░рдирд╛
putStrLn locDescr
putStr "рдХрдорд╛рдВрдб рджрд░реНрдЬ рдХрд░реЗрдВ:"
x <- рдЧреЗрдЯрд▓рд╛рдЗрди
рдорд╛рдорд▓рд╛ ( ConvertStringToAction x ) рдХрд╛
рдЫреЛрдбрд╝реЛ -> putStrLn " рддреБрдордХреЛ рджреЗрдЦрд╛ ..."
рджреЗрдЦреЛ -> рдХрд░рддреЗ рд╣реИрдВ
putStrLn locDescr
рдХрд░реНрд▓реЛрдХ рдЪрд▓рд╛рдПрдВ
... - рд╢реЗрд╖ рдХреЛрдб
рдЬрд╣рд╛рдБ
locDescr = рд╡рд░реНрдгрдиL рдХрд░реНрд▓реЛрдХ


рд╣рдо рдЬрд╣рд╛рдВ рдмреНрд▓реЙрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЦрдВрдб рд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рд╣реА рдЗрдВрдбреЗрдВрдЯ рдмрдирд╛рдпрд╛ред рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ, рд╣рдордиреЗ рдЗрд╕ рдмреНрд▓реЙрдХ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛рдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рд╣реИред рдРрд╕рд╛ рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдкрд░рд┐рдгрд╛рдо рдХреЛ рдЪрд░ рд▓реЛрдХрдбрд╛рд╕рдХ рдХреЛ рд╕реМрдВрдк рд░рд╣реЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИред рдпрд╣рд╛рдВ рдХреЛрдИ рдЪрд░ рдФрд░ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдирд╣реАрдВ рд╣реИрдВ; locDescr рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬреЛ рдХрд┐рд╕реА рд╕реНрдерд╛рди рдХрд╛ рд╡рд┐рд╡рд░рдг рджреЗрддрд╛ рд╣реИред рд╣рдо рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдореВрд▓ рдХреЛрдб рд╕реЗ, рдФрд░ рджреЛ рдмрд╛рд░ рдХрд╣рддреЗ рд╣реИрдВ; рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рдЧрдгрдирд╛ рдХреА рдЬрд╛рддреА рд╣реИред рд╣рд╕реНрдХреЗрд▓ рд╕рдВрдХрд▓рдХ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдкрд┐рдЫрд▓реЗ рдкрд░рд┐рдгрд╛рдо рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВред рдЬрдм рдбреЗрдЯрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рддреЛ рдпрд╣ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдХрдЪрд░рд╛ рдХрд▓реЗрдХреНрдЯрд░ рджреНрд╡рд╛рд░рд╛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрдВрддрд┐рдо рднрд╛рдЧ рд╕реЗ рд╕рд╛рдЗрдбрдмрд╛рд░ рдХреЛ рдпрд╛рдж рд░рдЦреЗрдВ, рдЬрд╣рд╛рдВ рдлрд╛рдЗрдмреЛрдиреИрдЪрд┐ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреА рдЧрдгрдирд╛ рдХреА рдЬрд╛рддреА рд╣реИред рдпрджрд┐ рд╢реБрд░реВ рд╕реЗ рд╣реА рдореВрд▓реНрдпреЛрдВ рдХреА рдЧрдгрдирд╛ рдмрд╣реБрдд рд╢реБрд░реБрдЖрдд рд╕реЗ рдХреА рдЧрдИ рдереА, рддреЛ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреИрд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛?

рдЕрдВрдд рдореЗрдВ, рдЕрдВрддрд┐рдо рд╕рдорд╛рдзрд╛рди - рддрдерд╛рдХрдерд┐рдд рд▓реЗрдЯ-рдПрдХреНрд╕рдкреНрд░реЗрд╢рдВрд╕ - рд╕рдмрд╕реЗ рд╕рд░рд▓ рдФрд░, рд╢рд╛рдпрдж, рдпрд╣рд╛рдВ рд╕рдмрд╕реЗ рдЙрдкрдпреБрдХреНрдд рд╣реИред рдФрд░ рд╣рд╛рд▓рд╛рдБрдХрд┐, рд▓реЗрдЯ-рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рдмрд╣реБрдд рд╣реА рд╕рдорд╛рди рд╣реИрдВ рдЬрд╣рд╛рдБ, рд╡реЗ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдЙрдкрдирд╛рдореЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдРрд╕реЗ рдирд╛рдореЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рд░реНрдп рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдбреВ рдмреНрд▓реЙрдХ рдХреЗ рдЕрдВрджрд░, рдЗрд╕ рддрд░рд╣ рдХреА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИ:

рд░рди :: рд╕реНрдерд╛рди -> IO ( )
рджреМрдбрд╝рдирд╛ curLoc = рдХрд░рдирд╛
рдЖрдЬреНрдЮрд╛ рджреЗрдирд╛ locDescr = рд╡рд░реНрдгрдиL рдХрд░реНрд▓реЛрдХ
putStrLn locDescr
putStr "рдХрдорд╛рдВрдб рджрд░реНрдЬ рдХрд░реЗрдВ:"
x <- рдЧреЗрдЯрд▓рд╛рдЗрди
рдорд╛рдорд▓рд╛ ( ConvertStringToAction x ) рдХрд╛
рдЫреЛрдбрд╝реЛ -> putStrLn " рддреБрдордХреЛ рджреЗрдЦрд╛ ..."
рджреЗрдЦреЛ -> рдХрд░рддреЗ рд╣реИрдВ
putStrLn locDescr
рдХрд░реНрд▓реЛрдХ рдЪрд▓рд╛рдПрдВ
... - рд╢реЗрд╖ рдХреЛрдб


рдпрджрд┐ рдЖрдк рдбреЛ рдмреНрд▓реЙрдХ рдХреЗ рдмрд╛рд╣рд░ рдПрдХ рд▓реЗрдЯ-рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрдиреНрдп рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреЗ рдЕрдВрджрд░, рддреЛ рд░рд┐рдХреЙрд░реНрдб рдереЛрдбрд╝рд╛ рдмрджрд▓ рдЬрд╛рдПрдЧрд╛ред рдХреАрд╡рд░реНрдб рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИ:

рд░рди :: рд╕реНрдерд╛рди -> IO ( )
рджреМрдбрд╝рдирд╛ curLoc =
рдЖрдЬреНрдЮрд╛ рджреЗрдирд╛ locDescr = descriptionLocation curLoc in
рдХрд░рдирд╛
putStrLn locDescr
putStr "рдХрдорд╛рдВрдб рджрд░реНрдЬ рдХрд░реЗрдВ:"
x <- рдЧреЗрдЯрд▓рд╛рдЗрди
рдорд╛рдорд▓рд╛ ( ConvertStringToAction x ) рдХрд╛
рдЫреЛрдбрд╝реЛ -> putStrLn " рддреБрдордХреЛ рджреЗрдЦрд╛ ..."
рджреЗрдЦреЛ -> рдХрд░рддреЗ рд╣реИрдВ
putStrLn locDescr
рдХрд░реНрд▓реЛрдХ рдЪрд▓рд╛рдПрдВ
... - рд╢реЗрд╖ рдХреЛрдб


рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЖрдк рд▓реЗрдЯ рдЗрди - рдХреЗ рдмреАрдЪ рдХрд┐рд╕реА рднреА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдРрд╕реЗ рднрд╛рд╡реЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЖрдк рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рджрд┐рд╢рд╛ рдореЗрдВ рдпрд╣ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рдмреАрдЪ, рд╣рдо рдкрд┐рдЫрд▓реЗ рд╡рд┐рдХрд▓реНрдк рдХреЛ рдЫреЛрдбрд╝ рджреЗрдВрдЧреЗ, рдЬрд╣рд╛рдВ рд▓реЗрдЯ-рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рдбреЛ-рдмреНрд▓реЙрдХ рдХреЗ рдЕрдВрджрд░ рд╣реЛрддрд╛ рд╣реИред

рд▓реЗрдЯ-рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рди рдХреЗрд╡рд▓ рдЕрдЪреНрдЫреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдЫреЛрдЯреЗ рд▓рд┐рдЦреЗ рдЧрдП рд╣реИрдВ, рдмрд▓реНрдХрд┐ рдЗрд╕рд▓рд┐рдП рднреА рдХрд┐ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХреБрдЫ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рд╣реА рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд▓рд┐рдП рд╕реВрдЪреА рдмреЛрдз рдореЗрдВ рдбрд╛рд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: рдПрдХ рд╕реАрдорд┐рдд рджрд╛рдпрд░реЗ рдХреЗ рд╕рд╛рде рдПрдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЬрд╣рд╛рдБ рдЗрд╕рдХреЗ рдиреБрдХрд╕рд╛рди рднреА рд╣реИрдВ, рдЙрдирдХреА рддреБрд▓рдирд╛ рдореЗрдВ: рдЖрдк рдЧрд╛рд░реНрдб рднрд╛рд╡ рдФрд░ рдкреИрдЯрд░реНрди рдорд┐рд▓рд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред рдмреЗрд╢рдХ, рдЪреВрдВрдХрд┐ рд╣рдо рдЫрджреНрдо рд╢рдмреНрджреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЙрдирдХреЗ рджрд╛рдпрд░реЗ рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рджреЛрд╣рд░рд╛рдпрд╛ рдирд╣реАрдВ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред


рдЖрдк рдкреВрдЫрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдХрдм рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ? рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╣реА рд╕реНрд╡рд┐рдЪ рдХрд░ рд▓рд┐рдпрд╛ рд╣реИред рдХреНрдпрд╛ рдЖрдк рдЕрднреА рддрдХ рдирд╣реАрдВ рд╣реИрдВ, рдпрд╛ рдХреНрдпрд╛? рдлрд┐рд░ рдкрдХрдбрд╝ рд▓реЛред рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП ADT рдЯрд╛рдЗрдк рдмрдирд╛рдПрдВ, рдЬреИрд╕реЗ:

рдбреЗрдЯрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ = рддрд╛рд▓рд┐рдХрд╛
| рдЫрд╛рддрд╛
| рджрд░рд╛рдЬ
| рдлрд╝реЛрди
| рдореЗрд▓рдмреЙрдХреНрд╕
| Friend'sKey
рд╡реНрдпреБрддреНрдкрдиреНрди ( Eq , рд╢реЛ , рдкрдврд╝реЗрдВ )


рд╕реНрдерд╛рдиреЛрдВ рдХреА рдЫрд╡рд┐ рдореЗрдВ, рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╡рд┐рд╡рд░рдг рдХреЗ рд╕рд╛рде рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдЬреЛрдбрд╝реЗрдВ:

descriptionObject :: рдСрдмреНрдЬреЗрдХреНрдЯ -> рд╕реНрдЯреНрд░рд┐рдВрдЧ
рд╡рд░реНрдгрди рдХрд░реЗрдВ рдЫрд╛рддрд╛ = "рдЕрдЪреНрдЫрд╛ рд▓рд╛рд▓ рдореИрдХреЗрдирд┐рдХ рдЫрд╛рддрд╛ред"
рд╡рд░реНрдгрди рддрд╛рд▓рд┐рдХрд╛ = "рджрд░рд╛рдЬ рдХреЗ рд╕рд╛рде рдЕрдЪреНрдЫреА рд▓рдХрдбрд╝реА рдХреА рдореЗрдЬред"
descriptionObject Phone = "рдлрд╝реЛрди рдореЗрдВ рдЖрдкрдХреЗ рд▓рд┐рдП рдХреБрдЫ рдзреНрд╡рдирд┐ рд╕рдВрджреЗрд╢ рд╣реИрдВред"
descriptionObject MailBox = "рдореЗрд▓рдмреЙрдХреНрд╕ рдмрдВрдж рд╣реЛ рдЧрдпрд╛ рд╣реИред"
descriptionObject obj = "" ++ рд╢реЛ obj рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдЦрд╛рд╕ рдирд╣реАрдВ рд╣реИ


рдХреЛрдИ рдЪрд╛рд▓ рдирд╣реАрдВ рд╣реИ, рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдпрд╣ рд╕рдм рдЬрд╛рдирддреЗ рд╣реИрдВ рдФрд░ рд╣рдо рд╕рдХреНрд╖рдо рд╣реИрдВред рдПрдХ рдирдпрд╛ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ рдЬрдм рд╣рдореЗрдВ рд╕реНрдерд╛рдиреЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рд╣рдо рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЪрд╛рд╣реЗрдВрдЧреЗ рдХрд┐ рд╕рдм рдХреБрдЫ рддреИрдпрд╛рд░ рдерд╛, рдЯреЗрдХ рдПрдВрдб рдбреНрд░рд╛рдк рдиреЗ рдХрд╛рдо рдХрд┐рдпрд╛, рдПрдХ рдЗрдиреНрд╡реЗрдВрдЯреНрд░реА рдереА, рдХрдВрдкрд╛рдЙрдВрдб рдСрдмреНрдЬреЗрдХреНрдЯ рдереЗ ... рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдЕрдм рд╣рдо рдЙрди рд╕реНрдерд╛рдиреЛрдВ рдореЗрдВ рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдПрдХ рдорд╕реМрджрд╛ рд╕рдВрд╕реНрдХрд░рдг рдмрдирд╛рдПрдВрдЧреЗ, рдЬрд╣рд╛рдВ рдЙрдиреНрд╣реЗрдВ рди рддреЛ рд▓реЗ рдЬрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рди рд╣реА рдлреЗрдВрдХрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╣рдо рдЕрдиреНрдп, рдЕрдзрд┐рдХ рдЙрдиреНрдирдд рдФрд░ рдЙрдкрдпреБрдХреНрдд рддрдВрддреНрд░реЛрдВ рдХреЗ рд╕рд╛рде рдЖрдПрдВрдЧреЗред

рдорд╛рди рд▓реАрдЬрд┐рдП, рд╣реЛрдо рд▓реЛрдХреЗрд╢рди рдореЗрдВ, рдЬрд╣рд╛рдВ рдЦреЗрд▓ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рдХрдИ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИрдВ, рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рдЯреЗрдмрд▓, рдЯреЗрдмрд▓ рдбреНрд░рд╛рд╡рд░, рдПрдХ рдЯреЗрд▓реАрдлреЛрди рдФрд░ рдПрдХ рдЫрд╛рддрд╛ рд╣реИред рд╣рдо рд╕реНрдерд╛рди рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдлрд╝рдВрдХреНрд╢рди рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдЗрд╕ рд╕реНрдерд╛рди рдХреЗ рд▓рд┐рдП рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рд╕реВрдЪреА рд▓реМрдЯрд╛рдПрдЧрд╛:

рд╕реНрдерд╛рди : рд╕реНрдерд╛рди :: рд╕реНрдерд╛рди -> [ рд╡рд╕реНрддреБ ]
рд╕реНрдерд╛рдирд╡рд┐рд╢реЗрд╖ рд╣реЛрдо = [ рдЫрд╛рддрд╛ , рджрд░рд╛рдЬ , рдлреЛрди , рдЯреЗрдмрд▓ ]
locationObjects _ = [ ]


рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд╕реВрдЪрд┐рдпрд╛рдВ рд╕рд░рд▓ рджрд┐рдЦрддреА рд╣реИрдВред рд╡рд╕реНрддреБрдУрдВ рдХреА рдПрдХ рд╕реВрдЪреА [рд╡рд╕реНрддреБ] рдХрд╛ рдПрдХ рдкреНрд░рдХрд╛рд░ рд╣реИред рд╣реЛрдо рд▓реЛрдХреЗрд╢рди рдХреЗ рд▓рд┐рдП, рд╣рдо рдЪрд╛рд░ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреА рд╕реВрдЪреА рд▓реМрдЯрд╛рддреЗ рд╣реИрдВред рдПрдХ рдЦрд╛рд▓реА рд╕реВрдЪреА рдХреЛ рдЦрд╛рд▓реА рд╡рд░реНрдЧ рдХреЛрд╖реНрдардХ рджреНрд╡рд╛рд░рд╛ рдЗрдВрдЧрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЬрдм рддрдХ рдХрд┐ рдЕрдиреНрдп рд╕рднреА рд╕реНрдерд╛рди рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдмрд┐рдирд╛ рди рд╣реЛрдВред рдпрд╣ рдЖрдЧреЗ рдмрдврд╝рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдХреЛрдб рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реИред

* рдореБрдЦреНрдп : рд╕реНрдерд╛рдирд╡рд┐рд╢реЗрд╖ рд╣реЛрдо
[ рдЫрд╛рддрд╛ , рджрд░рд╛рдЬ , Phome , рдЯреЗрдмрд▓ ]

* рдореБрдЦреНрдп - рд╕реНрдерд╛рдирдУрдмрдЬреЗрдХреНрдЯреНрд╕ рдЧрд╛рд░реНрдбрди
[ ]

* рдореБрдЦреНрдп : рд╡рд░реНрдгрди рддрд╛рд▓рд┐рдХрд╛ рдХреЛ рд╣рдЯрд╛рдПрдВ
"рджрд░рд╛рдЬ рдХреЗ рд╕рд╛рде рдЕрдЪреНрдЫреА рд▓рдХрдбрд╝реА рдХреА рдореЗрдЬред"


рдЪреВрдВрдХрд┐ рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░рдХрд╛рд░ рд╢реЛ рдкреНрд░рдХрд╛рд░ рд╡рд░реНрдЧ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рди рдХреЗрд╡рд▓ рдкреНрд░рдХрд╛рд░ рдХреЗ рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП, рдмрд▓реНрдХрд┐ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреА рд╕реВрдЪреА рдХреЗ рд▓рд┐рдП рднреА рд╢реЛ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

* рдореБрдЦреНрдп : рдЫрд╛рддрд╛ рджрд┐рдЦрд╛рддреЗ рд╣реИрдВ
┬лрдЫрд╛рддрд╛┬╗

* рдореБрдЦреНрдп рд╢реЛ [ рдЫрд╛рддрд╛ , рдЯреЗрдмрд▓ ]
"[рдЫрд╛рддрд╛, рдЯреЗрдмрд▓]"

* рдореБрдЦреНрдп : рд╢реЛ ( рд╕реНрдерд╛рдирдСрдмреНрдЬреЗрдХреНрдЯ рд╣реЛрдо )
"[рдЫрд╛рддрд╛, рджрд░рд╛рдЬ, рдлреЛрди, рдЯреЗрдмрд▓]"

* рдореБрдЦреНрдп : putStrLn ( рд╢реЛ ( рд╕реНрдерд╛рдирдСрдмреНрдЬреЗрдХреНрдЯ рд╣реЛрдо ) )
[ рдЫрд╛рддрд╛ , рджрд░рд╛рдЬ , рдлреЛрди , рдЯреЗрдмрд▓ ]


рдЖрдХреНрд╖реЗрдк рднреА рд╕рддреНрдп рд╣реИред рдпрджрд┐ рд╕реВрдЪреА рдЖрдЗрдЯрдо рдХреЛ рд░реАрдб рдлрдВрдХреНрд╢рди рджреНрд╡рд╛рд░рд╛ рдкрд╛рд░реНрд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рдкреВрд░реА рд╕реВрдЪреА рдХреЛ рднреА рдкрд╛рд░реНрд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

* рдореБрдЦреНрдп : "[рдЯреЗрдмрд▓, рдореЗрд▓рдмреЙрдХреНтАНрд╕]" :: [ рд╡рд╕реНрддреБ ] рдкрдврд╝реЗрдВ
[ рдЯреЗрдмрд▓ , рдореЗрд▓рдмреЙрдХреНрд╕ ]


рдЕрдм рдЬрдм рд╣рдо рд╡рд╛рдХреНрдп рд░рдЪрдирд╛ рдХреЛ рд╕рдордЭ рдЧрдП рд╣реИрдВ, рддреЛ рд╣рдо рдЗрд╕реЗ рдмрдирд╛ рджреЗрдВрдЧреЗ рддрд╛рдХрд┐ рд╡рд░реНрддрдорд╛рди рд╕реНрдерд╛рди рдХреЗ рд▓рд┐рдП рди рдХреЗрд╡рд▓ рдЗрд╕рдХрд╛ рд╡рд┐рд╡рд░рдг рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛ, рдмрд▓реНрдХрд┐ рд╡рд╣рд╛рдВ рдореМрдЬреВрдж рд╡рд╕реНрддреБрдУрдВ рдХреА рдПрдХ рд╕реВрдЪреА рднреА рдЫрдкреЗред рд▓реЗрдЯ-рдПрдХреНрд╕рдкреНрд░реЗрд╢рдВрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ:

рджреМрдбрд╝рдирд╛ curLoc = рдХрд░рдирд╛
рдЖрдЬреНрдЮрд╛ рджреЗрдирд╛ locDescr = рд╡рд░реНрдгрдиL рдХрд░реНрд▓реЛрдХ
рдЖрдЗрдП рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕рд╕реНрдХреНрд░реЗрд╕ = " \ n рдпрд╣рд╛рдВ рдХреБрдЫ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рд╣реИрдВ:" ++ рд╢реЛ ( рд▓реЛрдХреЗрд╢рдирдСрдмреНрдЬреЗрдХреНрдЯ рдХрд░реНрд▓реЛрдХ )
рдЖрдЬреНрдЮрд╛ рджреЗрдирд╛ fullDescr = locDescr ++ ObjectsDescr
putStrLn fullDescr
... - рдХреЛрдб рдХреЗ рдмрд╛рдХреА, рджреЗрдЦреЛ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЛ рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордд рднреВрд▓рдирд╛ред


рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛ рдЖрдЙрдЯрдкреБрдЯ рдЕрдм рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

* рдореБрдЦреНрдп - рдореБрдЦреНрдп
рд╣рд╛рд╕реНрдХреЗрд▓ рдкрд░ рдХреНрд╡реЗрд╕реНрдЯ рд╕рд╛рд╣рд╕рд┐рдХ ред

рдШрд░
рдЖрдк рд▓рдХрдбрд╝реА рдХреЗ рдЯреЗрдмрд▓ рдкрд░ рдмреАрдЪ рдХреЗ рдХрдорд░реЗ рдореЗрдВ рдЦрдбрд╝реЗ рд╣реИрдВ ред
рдпрд╣рд╛рдБ рдХреБрдЫ рд╡рд╕реНрддреБрдПрдБ рд╣реИрдВ: [ рдЫрд╛рддрд╛ , рджрд░рд╛рдЬ , рдлреЛрди , рдЯреЗрдмрд▓ ]
рдХрдорд╛рдВрдб рджрд░реНрдЬ рдХрд░реЗрдВ:


рдХреЛрдб рдореЗрдВ рдереЛрдбрд╝рд╛ рдЙрдкрджреНрд░рд╡ рд╣реИред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдЧрд░ рд╕реНрдерд╛рди рдореЗрдВ рдХреЛрдИ рдСрдмреНрдЬреЗрдХреНрдЯ рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рд╢рд┐рд▓рд╛рд▓реЗрдЦ "рдпрд╣рд╛рдВ рдХреБрдЫ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИрдВ:" рдЕрднреА рднреА рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдПрдХ рдирдЬрд░ рд╣реЛрдЧреАред

рдХрдорд╛рдВрдб рджрд░реНрдЬ рдХрд░реЗрдВ: рдЙрддреНрддрд░ рдЬрд╛рдУ

рдЖрдк рдЙрддреНрддрд░ рдХреА рдУрд░ рдЪрд▓рдирд╛ ред

рдЙрджреНрдпрд╛рди
рдЖрдк рдмрдЧреАрдЪреЗ рдореЗрдВ рд╣реИрдВ ред .....
рдпрд╣рд╛рдБ рдХреБрдЫ рд╡рд╕реНрддреБрдПрдБ рд╣реИрдВ: [ ]
рдХрдорд╛рдВрдб рджрд░реНрдЬ рдХрд░реЗрдВ:


рд╡рд╕реНрддреБрдУрдВ рдХреА рдПрдХ рдЦрд╛рд▓реА рд╕реВрдЪреА рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдЕрд▓рдЧ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рднреА рдХреЛрдб рдбрд╛рд▓рддреЗ рд╣реИрдВ, рдЗрд╕реЗ enumerateObjects рдХрд╣рддреЗ рд╣реИрдВред рдЗрдирдкреБрдЯ рдкрд░, рдпрд╣ рдПрдХ рд╕реВрдЪреА рд▓реЗрддрд╛ рд╣реИ, рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ рдпрд╣ рд╕реВрдЪреАрдмрджреНрдз рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЧреБрдЬрд░рддрд╛ рд╣реИред

enumerateObjects :: [ рд╡рд╕реНрддреБ ] -> рд╕реНрдЯреНрд░рд┐рдВрдЧ
enumerateObjects [ ] = ""
enumerateObjects рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ = " \ n рдпрд╣рд╛рдВ рдХреБрдЫ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рд╣реИрдВ:" ++ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рджрд┐рдЦрд╛рддреЗ рд╣реИрдВ


EnumerateObjects рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдкрд╣рд▓рд╛ рд╕рдВрд╕реНрдХрд░рдг рдПрдХ рд░рд┐рдХреНрдд рд╕реНрдЯреНрд░рд┐рдВрдЧ рджреЗрддрд╛ рд╣реИ - рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рддрдм рдЬрдм рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреА рд╕реВрдЪреА рд░рд┐рдХреНрдд рд╣реЛред рдпрджрд┐ рдпрд╣ рдЦрд╛рд▓реА рдирд╣реАрдВ рд╣реИ, рддреЛ рдкрд╣рд▓рд╛ рд╡рд┐рдХрд▓реНрдк рдЦрд╛рд░рд┐рдЬ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рджреВрд╕рд░рд╛ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред рд░рди рдлрд╝рдВрдХреНрд╢рди:

рджреМрдбрд╝рдирд╛ curLoc = рдХрд░рдирд╛
рдЖрдЬреНрдЮрд╛ рджреЗрдирд╛ locDescr = рд╡рд░реНрдгрдиL рдХрд░реНрд▓реЛрдХ
рдЖрдЬреНрдЮрд╛ рджреЗрдирд╛ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ = enumerateObjects ( рд╕реНрдерд╛рдирдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ curLoc )
рдЖрдЬреНрдЮрд╛ рджреЗрдирд╛ fullDescr = locDescr ++ ObjectsDescr
putStrLn fullDescr
... - ...


рдпрд╛, рдпрджрд┐ рдЖрдк рдЪрд╛рд╣реЗрдВ, рддреЛ рдЖрдк do block рд╕реЗ рд▓реЗрдЯ рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рдирд┐рдХрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ:

рджреМрдбрд╝рдирд╛ curLoc =
рдЪрд▓реЛ
locDescr = рд╡рд░реНрдгрдиL рдХрд░реНрд▓реЛрдХ
рдСрдмреНрдЬреЗрдХреНрдЯрдбреНрд░реЗрд╕рд░ = enumerateObjects ( рд╕реНрдерд╛рдирдСрдмреНрдЬреЗрдХреНрдЯ рдХрд░реНрд▓реЙрдХ )
fullDescr = locDescr ++ ObjectsDescr
рдореЗрдВ рдХрд░рддреЗ рд╣реИрдВ
putStrLn fullDescr
... - ...


рдЗрд╕ рд╕рд░рд▓ рд░реАрдлреИрдХреНрдЯрд░рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдЕрдм рд╣рдо рд░рди рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд┐рдП рдмрд┐рдирд╛ enumerateObjects рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП рд╣рдо рдЪрд╛рд╣рддреЗ рдереЗ, рдХрд╣реЗрдВ рдХрд┐ рдХреЗрд╡рд▓ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рд╣реА рди рд░рдЦреЗрдВ, рдмрд▓реНрдХрд┐ рдЙрдирдХреЗ рд╡рд┐рд╡рд░рдгреЛрдВ рдХреЛ рднреА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВ, - рдЗрд╕рд▓рд┐рдП рд╣рдо рдЕрдкрдиреЗ рдЪрдВрдЪрд▓ рдХрд▓рдореЛрдВ рдХреЗ рд╕рд╛рде рд╣рдорд╛рд░реЗ enumerateObjects рдореЗрдВ рдЪрдврд╝рддреЗ рд╣реИрдВ рдФрд░ рд╡рд╣рд╛рдВ рдХреБрдЫ рдЪрддреБрд░рддрд╛ рдХреЛ рдареАрдХ рдХрд░рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рддрд░рд╣ рдмрд╛рдж рдореЗрдВред рдЕрдм рдЖрдЗрдП рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдХрд╕реНрдЯрдо рдПрдХреНрд╢рди рдЗрдирд╡реЗрд╕реНрдЯрд┐рдЧреЗрдЯред рдЗрд╕ рдХрдорд╛рдВрдб рджреНрд╡рд╛рд░рд╛, рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рд╡рд┐рд╕реНрддреГрдд рд╡рд┐рд╡рд░рдг рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд░реНрдЬ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП:

рдХрдорд╛рдВрдб рджрд░реНрдЬ рдХрд░реЗрдВ: рдЫрд╛рддрд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВ


рд▓рд╛рдЗрди "рдЗрдиреНрд╡реЗрд╕реНрдЯрд┐рдЧреЗрдЯ рдЕрдореНрдмреНрд░реЗрд▓рд╛" рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдкрд░рд┐рдЪрд┐рдд, рд╣реИ рдирд╛? рдЧреЛ рдЯреАрдо рдХреЗ рд╕рд╛рде рд╣рдо рдкрд╣рд▓реЗ рд╣реА рдЗрд╕рд╕реЗ рдЧреБрдЬрд░ рдЪреБрдХреЗ рдереЗред рдпрд╣рд╛рдБ рдПрдХ рд╣реА рдмрд╛рдд рд╣реИ: рдмрд╕ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдЗрдВрд╡реЗрд╕реНрдЯрд┐рдЧреЗрдЯ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ рдбрд╛рд▓реЗрдВред

рдбреЗрдЯрд╛ рдПрдХреНрд╢рди =
...
| рд╡рд╕реНрддреБ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдирд╛
...


рдХреЗрд╡рд▓ рдереЛрдбрд╝рд╛ рд░рд╣ рдЧрдпрд╛ - рд░рди рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╕рд╣реА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП:

рджреМрдбрд╝рдирд╛ curLoc = рдХрд░рдирд╛
...
...
рдорд╛рдорд▓рд╛ ( ConvertStringToAction x ) рдХрд╛
рдЬрд╛рдБрдЪ рдХрд░реЗрдВ obj -> рдХрд░рддреЗ рд╣реИрдВ
putStrLn ( рд╡рд┐рд╡рд░рдг рд▓рд┐рдЦреЗрдВ obj )
рдХрд░реНрд▓реЛрдХ рдЪрд▓рд╛рдПрдВ
...


рдФрд░ рд╡реЛрдЗрд▓рд╛! рдЖрдкрдиреЗ рдПрдХ рдЕрдиреНрдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛рд░реНрд░рд╡рд╛рдИ рд▓рд╛рдЧреВ рдХреА рд╣реИ! рдмрдзрд╛рдИ! рдЖрдк рдпрд╣ рдЬрд╛рдВрдЪ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрджрд┐ рдЖрдк "рдЫрд╛рддрд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВ" рдХрдорд╛рдВрдб рджрд░реНрдЬ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╕реНрдЯреНрд░рд┐рдВрдЧ "рдЕрдЪреНрдЫрд╛ рд▓рд╛рд▓ рдпрдВрддреНрд░ рдЫрд╛рддрд╛" рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдЧрд╛ред рдореИрдВ рдзреЛрдЦрд╛ рдирд╣реАрдВ рджреЗ рд░рд╣рд╛ рд╣реВрдВред

рдпрд╣ рд╕рд┐рд░реНрдл ... рдХреНрдпрд╛ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рд╕рд╛рде рдХреНрдпрд╛ рдмреБрд░рд╛ рд╣реИ? рдпрджрд┐ рд╣рдо рд╣реЛрдо рд▓реЛрдХреЗрд╢рди рдореЗрдВ рд╣реИрдВ, рддреЛ "рдЗрдирд╡реЗрд╕реНрдЯрд┐рдЧреЗрдЯ рдореЗрд▓рдмреЙрдХреНрд╕" рдХрдорд╛рдВрдб рдбрд╛рд▓реЗрдВ, рд╣рдореЗрдВ рдореЗрд▓рдмреЙрдХреНрд╕ рдХрд╛ рд╡рд┐рд╡рд░рдг рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬреЛ рдпрд╣рд╛рдБ рд╕реЗ рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ! рдареАрдХ рд╣реИ, рдлрд┐рд░ рд╣рдо рдПрдХ рдЕрджреГрд╢реНрдп рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдЖрдПрдВрдЧреЗ, рдЬреЛ рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рджреЗрдЦрдиреЗ рдкрд░ рд╕рд╣реА рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдХреЗрд╡рд▓ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╣рдо рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рд╡рд┐рд╡рд░рдг рдЬрд╛рд░реА рдХрд░реЗрдВрдЧреЗред рдЕрджреГрд╢реНрдп рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдХреНрдпрд╛ рддрд░реНрдХ рд╣реИрдВ? рд╣рдореЗрдВ рдПрдХ рдЬрд╛рдВрдЪ рдХреА рдЧрдИ рд╡рд╕реНрддреБ, рд╕рд╛рде рд╣реА рд╕рднреА рд╕реНрдерд╛рди рд╡рд╕реНрддреБрдУрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдХреБрдЫ рдЗрд╕ рддрд░рд╣:

isV рдЕрджреГрд╢реНрдп :: рдСрдмреНрдЬреЗрдХреНрдЯ -> [ рдСрдмреНрдЬреЗрдХреНрдЯ ] -> рдмреВрд▓


рдЕрдм рдЖрдкрдХреЛ рдХрд┐рд╕реА рддрд░рд╣ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЗрд╕ рд╕реВрдЪреА рдореЗрдВ рдХреЛрдИ рд╡рд╕реНрддреБ рд╣реИред рд╣рдо рд╕реВрдЪреА рдореЗрдВ рд╕рднреА рд╡рд╕реНрддреБрдУрдВ рдХреА рдЧрдгрдирд╛ рдХреЗ рд╕рд╛рде "рдмреЗрд╡рдХреВрдл" рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рд╕рд╛рде рдирд╣реАрдВ рдЖрдПрдВрдЧреЗ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдмрд╣реБрдд рд╕рдВрднрд╡ рд╣реИ, рд╣рдо рд╕рд┐рд░реНрдл рдорд╛рдирдХ рдПрд▓рдПрдо рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рджреЛ рдкреИрд░рд╛рдореАрдЯрд░ рд▓реЗрддрд╛ рд╣реИ: рддрддреНрд╡ рдФрд░ рд╕реВрдЪреАред рдпрджрд┐ рдЖрдЗрдЯрдо рд╕реВрдЪреА рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ True рд▓реМрдЯрд╛рддрд╛ рд╣реИред рдЖрдкрдХреЛ рдХреНрдпрд╛ рдЪрд╛рд╣рд┐рдП!

isV рдЕрджреГрд╢реНрдп :: рдСрдмреНрдЬреЗрдХреНрдЯ -> [ рдСрдмреНрдЬреЗрдХреНрдЯ ] -> рдмреВрд▓
isVouble obj рд╡рд╕реНрддреБрдПрдБ = рд╣рд╛рдереА obj рд╡рд╕реНрддреБрдПрдБ


рд╣рд╛рд╕реНрдХреЗрд▓ рдореЗрдВ рд╕рдВрдХреЗрддрди рдХрд╛ рдПрдХ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЙрд╕рдХреЗ рддрд░реНрдХреЛрдВ рдХреЗ рдмреАрдЪ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдЕрд░реНрде рдХреА рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯрддрд╛ рдФрд░ рдкрд╛рд░рджрд░реНрд╢рд┐рддрд╛ рдХреЗ рд▓рд┐рдПред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд░рд┐рд╡рд░реНрд╕ рдПрдкреЛрд╕реНрдЯреНрд░реЛрдлрд╝реНрд╕ рдореЗрдВ рд╕рдВрд▓рдЧреНрди рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЬреЛ рдХрд┐ред рдмрдЯрди рдкрд░ рд╣реИрдВред

isVaware ' :: рдСрдмреНрдЬреЗрдХреНрдЯ -> [ рдСрдмреНрдЬреЗрдХреНрдЯ ] -> рдмреВрд▓
isVouble 'obj рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ = obj ` elem` рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕


рд▓реЗрдХрд┐рди рдПрдХ рд╣реА рдлрд╝рдВрдХреНрд╢рди рдХреЗ "рдЧреВрдВрдЧрд╛" рд╕рдВрд╕реНрдХрд░рдгред рдЙрдирдореЗрдВ, рд╣рдо рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд╕реВрдЪреА рдХреЗ рдЕрдВрджрд░ рдХреА рд╡рд╕реНрддреБ рдХреА рддрд▓рд╛рд╢ рдХрд░рддреЗ рд╣реИрдВред

isVaware '' :: рдСрдмреНрдЬреЗрдХреНрдЯ -> [ рдСрдмреНрдЬреЗрдХреНрдЯ ] -> рдмреВрд▓
isVanish '' obj [ ] = рдЧрд▓рдд
isVaware '' obj ( o: os ) = ( obj == o ) || ( рдЕрджреГрд╢реНрдп '' obj рдУрдПрд╕ )

isVaware '' ' :: рдСрдмреНрдЬреЗрдХреНрдЯ -> [ рдСрдмреНрдЬреЗрдХреНрдЯ ] -> рдмреВрд▓
isVanish '' 'obj [ ] = рдЧрд▓рдд
isVanish '' 'obj рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ = ( obj == рд╣реЗрдб рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ ) || ( рдЕрджреГрд╢реНрдп '' 'рдУрдмреНрдЬ ( рдЯреЗрд▓ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ ) )


рд╡реЗ рдЙрд╕реА рддрд░рд╣ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдЕрдВрддрд░ рдХреЗрд╡рд▓ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рд╕рд╛рдзрдиреЛрдВ рдореЗрдВ рд╣реЛрддрд╛ рд╣реИред рд╡рд╣рд╛рдБ рдФрд░ рд╡рд╣рд╛рдБ рджреЛрдиреЛрдВ, рд╕реВрдЪреА рднрд╛рдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рд╣реИ: рдкреНрд░рдореБрдЦ рддрддреНрд╡ рдФрд░ рд╢реЗрд╖ рддрддреНрд╡реЛрдВ рдХреА рдкреВрдВрдЫред рдкрд╣рд▓реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ (рдУ: рдУрдПрд╕) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реВрдЪреА рдХреЛ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдЪрд░ "рдУ" рдореЗрдВ рд╕рд┐рд░ рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдЪрд░ "рдУрдПрд╕" рдореЗрдВ рдмрд╛рдХреА рд╕рдм рдХреБрдЫ рд╣реЛрддрд╛ рд╣реИред рджреВрд╕рд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдо рд╡рд╣реА рдХрд░рддреЗ рд╣реИрдВ, рдХреЗрд╡рд▓ рд╕рд┐рд░ рдФрд░ рдкреВрдВрдЫ рд╕реВрдЪреА рдХреЗ рдКрдкрд░ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рд╛рдеред рдЕрдЧрд▓рд╛, рд╣рдо рдмрд╕ рдпрд╣ рдЬрд╛рдВрдЪрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рд╡рд╕реНрддреБ рдкреНрд░рдзрд╛рди рддрддреНрд╡ рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИ, рдФрд░ рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рд╢реЗрд╖ рддрддреНрд╡реЛрдВ рдХреЗ рд▓рд┐рдП рдЕрджреГрд╢реНрдп рд░реВрдк рд╕реЗ рдХреЙрд▓ рдХрд░реЗрдВред рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреЛ рдЕрдирдВрдд рд╣реЛрдиреЗ рд╕реЗ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдордиреЗ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдПрдХ рдкреНрд░рдХрд╛рд░ рдЬреЛрдбрд╝рд╛ тАЬрдЕрджреГрд╢реНрдп рдУрдмреНрдЬ [] = рдЧрд▓рддтАЭ - рдпрд╣ рдХрд╛рдо рдХрд░реЗрдЧрд╛ рдЕрдЧрд░ рд╣рдо рдЕрдЪрд╛рдирдХ рд╕реВрдЪреА рд╕реЗ рд╕рднреА рддрддреНрд╡реЛрдВ рдХреЛ рдХрд╛рдЯрддреЗ рд╣реИрдВ рдФрд░ рдХреБрдЫ рднреА рдирд╣реАрдВ рд░рд╣рддрд╛ рд╣реИред


рд╡реИрд╕реЗ, рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмрд╛рдХреА рд╣реИред рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣, рд╣рдо рдмрджрд▓реЗрдВрдЧреЗ, рдФрд░ рдХрдИ рдмрд╛рд░ рд╡рд░реНрддрдорд╛рди рд╕реНрдерд╛рди рдХреА рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдЕрдиреБрд░реЛрдз рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЙрдиреНрд╣реЗрдВ рдПрдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдореЗрдВ рдбрд╛рд▓ рджреЗрдВрдЧреЗ:

рджреМрдбрд╝рдирд╛ curLoc = рдХрд░рдирд╛
locObjects = locObjects рдХрд░реНрд▓реЛрдХ рджреЗрдВ
рдЖрдЬреНрдЮрд╛ рджреЗрдирд╛ locDescr = рд╡рд░реНрдгрдиL рдХрд░реНрд▓реЛрдХ
рдЖрдЬреНрдЮрд╛ рджреЗрдирд╛ рд╡рд╕реНрддреБрдПрдБ = enumerateObjects locObjects
рдЖрдЬреНрдЮрд╛ рджреЗрдирд╛ fullDescr = locDescr ++ ObjectsDescr
putStrLn fullDescr
putStr "рдХрдорд╛рдВрдб рджрд░реНрдЬ рдХрд░реЗрдВ:"
x <- рдЧреЗрдЯрд▓рд╛рдЗрди
рдорд╛рдорд▓рд╛ ( ConvertStringToAction x ) рдХрд╛
рдЬрд╛рдБрдЪ рдХрд░реЗрдВ obj -> рдХрд░рддреЗ рд╣реИрдВ
рдпрджрд┐ ( рдЕрджреГрд╢реНрдп obj locObjects рд╣реИ )
рдЙрд╕рдХреЗ рдмрд╛рдж putStrLn ( рд╡рд┐рд╡рд░рдг рд▓рд┐рдЦреЗрдВ obj )
рдмрд╛рдХреА putStrLn ( "рдЖрдк рдпрд╣рд╛рдВ рдХреЛрдИ" ++ рд╢реЛ obj ++ " рдирд╣реАрдВ рджреЗрдЦрддреЗ рд╣реИрдВред" )
рдХрд░реНрд▓реЛрдХ рдЪрд▓рд╛рдПрдВ
рдЫреЛрдбрд╝реЛ -> putStrLn " рддреБрдордХреЛ рджреЗрдЦрд╛ ..."
... - рдмрд╛рдХреА рдХреЛрдб


рд╡рд╣ рд╕рдм рд╣реИред рд╣рдо рдЗрд╕ рдкреНрд░рдореБрдЦ рдиреЛрдЯ рдкрд░ рд░реЛрдХ рджреЗрдВрдЧреЗ - рдпрд╣ рдЖрд░рд╛рдо рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИ, рд╣рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЬреНрдЮрд╛рди рдХреА рдПрдХ рдмрдбрд╝реА рдЧрд╛рдбрд╝реА рдорд┐рд▓ рдЧрдИ рд╣реИред

рдлрд┐рдХреНрд╕рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯред

1. рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╕рднреА рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдЯреНрд░рд╛рдВрд╕рдлрд╝рд░ рдХрд░реЗрдВ, рдФрд░ рд╕реНрдерд╛рдиреЛрдВ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╕рднреА рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЛ рд▓реЛрдХреЗрд╢рди рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВред
2. рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд░реВрдк рдореЗрдВ рд╕реНрдерд╛рди рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдПрдХ рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ рдирд┐рд╖реНрдХрд░реНрд╖ рдмрдирд╛рдПрдВ:

  рдШрд░
 рдЖрдк рд▓рдХрдбрд╝реА рдХреЗ рдЯреЗрдмрд▓ рдкрд░ рдмреАрдЪ рдХреЗ рдХрдорд░реЗ рдореЗрдВ рдЦрдбрд╝реЗ рд╣реИрдВред
   рдпрд╣рд╛рдБ рдХреБрдЫ рд╡рд╕реНрддреБрдПрдБ рд╣реИрдВ:
      рдЫрд╛рддрд╛: рдЕрдЪреНрдЫрд╛ рд▓рд╛рд▓ рдореИрдХреЗрдирд┐рдХ рдЫрд╛рддрд╛ред
      рддрд╛рд▓рд┐рдХрд╛: рджрд░рд╛рдЬ рдХреЗ рд╕рд╛рде рдЕрдЪреНрдЫреА рд▓рдХрдбрд╝реА рдХреА рдореЗрдЬред
      рдлреЛрди: рдлреЛрди рдореЗрдВ рдЖрдкрдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЖрд╡рд╛рдЬ рд╕рдВрджреЗрд╢ рд╣реИрдВред
     Drawer: There is nothing special about Drawer. 


3. Investigate, . run :

...
Investigate obj -> do
putStrLn ( investigate obj locObjects )
рдХрд░реНрд▓реЛрдХ рдЪрд▓рд╛рдПрдВ
...


рдЗрд╕ рднрд╛рдЧ рдХреЗ рд▓рд┐рдП рд╕реВрддреНрд░ ред

рд╕рд╛рдордЧреНрд░реА рдХреА рддрд╛рд▓рд┐рдХрд╛, рд╕рдВрджрд░реНрднреЛрдВ рдХреА рд╕реВрдЪреА рдФрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрд╛рдирдХрд╛рд░реА рдЧреНрд░реАрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ рдорд┐рд▓ рд╕рдХрддреА рд╣реИред

Source: https://habr.com/ru/post/In123422/


All Articles