рд╣рдо рдЕрдкрдиреЗ рдЖрдк рдкрд░ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдХрд░рдиреЗ рдФрд░ рдЙрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП monoids рдкрд░ рдПрдХ рд╕реБрдЕрд░ рд╕рд┐рдЦрд╛рддреЗ рд╣реИрдВ

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



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


тИЧ тИЧ тИЧ


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


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


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


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


рд╣рдо рдЖрд░рд╛рдо рдХреНрд╖реЗрддреНрд░ рдЫреЛрдбрд╝ рджреЗрддреЗ рд╣реИрдВ


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


рд╣рдо рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреА рдкреНрд░рднрд╛рд╡рд╢реАрд▓рддрд╛ рдХреЛ рдПрд░рд╛рдЯреЛрд╕реНрдердиреАрдЬ рдХреА рдЫрд▓рдиреА рдХреЗ рднреЛрд▓реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рдкрд░реАрдХреНрд╖рдг рдХрд░реЗрдВрдЧреЗ, рдЬреЛ рд╢реВрдиреНрдп рдФрд░ рдкреНрд░рд╛рдЗрдорд░реЛрдВ рдХреЛ рджрд░реНрд╢рд╛рддреЗ рд╣реБрдП, рд╢реВрдиреНрдп рдФрд░ рд▓реЛрдЧреЛрдВ рдХреЗ рд╕рд╛рде рдореЗрдореЛрд░реА (рд╕рд░рдгреА) рдХреЛ рднрд░рддрд╛ рд╣реИред рд╣рдо javascript рдореЗрдВ рдкреНрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рдХреЛрдб рдХреЛ javascript :


 var memSize = 65536; var arr = []; for (var i = 0; i < memSize; i++) arr.push(0); function sieve() { var n = 2; while (n*n < memSize) { if (!arr[n]) { var k = n; while (k < memSize) { k+=n; arr[k] = 1; } } n++; } } 

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


 sieve = push 2 <> while (dup <> dup <> mul <> push memSize <> lt) (dup <> get <> branch mempty fill <> inc) <> pop fill = dup <> dup <> add <> while (dup <> push memSize <> lt) (dup <> push 1 <> swap <> put <> exch <> add) <> pop 

рдФрд░ рдпрд╣рд╛рдБ рд╣реИ рдХрд┐ рдЖрдк рдПрдХ рдореБрд╣рд╛рд╡рд░реЗрджрд╛рд░ рд╣рд╛рд╕реНрдХреЗрд▓ рдкрд░ рдЗрд╕ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рдПрдХ рд╕рдорд╛рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреИрд╕реЗ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ, monopig рдореЗрдВ рдЙрд╕реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ:


 sieve' :: Int -> Vector Int -> Vector Int sieve' km | k*k < memSize = sieve' (k+1) $ if m ! k == 0 then fill' k (2*k) m else m | otherwise = m fill' :: Int -> Int -> Vector Int -> Vector Int fill' knm | n < memSize = fill' k (n+k) $ m // [(n,1)] | otherwise = m 

рдпрд╣ рдЗрд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Data.Vector рдкреНрд░рдХрд╛рд░ рдФрд░ рдЙрдкрдХрд░рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рд╣рд╛рд╕реНрдХреЗрд▓ рдореЗрдВ рд░реЛрдЬрдорд░реНрд░рд╛ рдХреЗ рдХрд╛рдо рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЖрдо рдирд╣реАрдВ рд╣реИрдВред рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ m ! k m ! k , рд╡реЗрдХреНрдЯрд░ m рдХреЗ k рд╡реЗрдВ рддрддреНрд╡ рдХреЛ рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рдФрд░ m // [(n,1)] - рд╕рдВрдЦреНрдпрд╛ n рд╕рд╛рде рддрддреНрд╡ рдХреЛ m // [(n,1)] рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИред рдореИрдВ рдЗрд╕реЗ рдпрд╣рд╛рдВ рд▓рд┐рдЦ рд░рд╣рд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рдорджрдж рдХреЗ рд▓рд┐рдП рдЙрдирдХреЗ рдкрд╛рд╕ рдЬрд╛рдирд╛ рдерд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВ рд╣рд╛рд╕реНрдХреЗрд▓ рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реВрдВ рд▓рдЧрднрдЧ рд╣рд░ рджрд┐рдиред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдПрдХ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдЙрдкрдпреЛрдЧ рдХреЗ рд╕рд╛рде рд╕рдВрд░рдЪрдирд╛рдПрдВ рдЕрдХреНрд╖рдо рд╣реИрдВ рдФрд░ рдЗрд╕ рдХрд╛рд░рдг рд╕реЗ рдЕрдкреНрд░рдХрд╛рд╢рд┐рдд рд╣реИрдВред


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



рдЦреМрдл рдХрд╛ рд╕рд╛рдпрд╛ !!! рди рдХреЗрд╡рд▓ monopig рдзреАрдорд╛ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рджреЗрд╢реА рд╕рдВрд╕реНрдХрд░рдг рдмрд╣реБрдд рдмреЗрд╣рддрд░ рдирд╣реАрдВ рд╣реИ! рд╣рд╛рд╕реНрдХреЗрд▓, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ, рд╢рд╛рдВрдд рд╣реИ, рд▓реЗрдХрд┐рди рдЗрддрдирд╛ рдирд╣реАрдВ рдЬрд┐рддрдирд╛ рдХрд┐ рдПрдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдЪрд▓ рд░рд╣реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╕реЗ рд╣реАрди рд╣реИ! рдЬреИрд╕рд╛ рдХрд┐ рдХреЛрдЪ рд╣рдореЗрдВ рд╕рд┐рдЦрд╛рддреЗ рд╣реИрдВ, рдЖрдк рдЙрд╕ рддрд░рд╣ рд╕реЗ рдирд╣реАрдВ рд░рд╣ рд╕рдХрддреЗ, рдпрд╣ рдЙрд╕ рдЖрд░рд╛рдорджрд╛рдпрдХ рдХреНрд╖реЗрддреНрд░ рдХреЛ рдЫреЛрдбрд╝рдиреЗ рдХрд╛ рд╕рдордп рд╣реИ рдЬреЛ рд╣рд╛рд╕реНрдХреЗрд▓ рд╣рдореЗрдВ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ!


рдЖрд▓рд╕реНрдп рдкрд░ рдХрд╛рдмреВ рдХрд░реЗрдВ


рдЪрд▓реЛ рдареАрдХ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд░рди-рдЯрд╛рдЗрдо рдЖрдБрдХрдбрд╝реЛрдВ рдкрд░ -rtsopts рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП -rtsopts рдзреНрд╡рдЬ рдХреЗ рд╕рд╛рде monopig рдкрд░ рдПрдХ рдХрд╛рд░реНрдпрдХреНрд░рдо рд╕рдВрдХрд▓рд┐рдд рдХрд░реЗрдВ рдФрд░ рджреЗрдЦреЗрдВ рдХрд┐ рд╣рдореЗрдВ рдПрдХ рдмрд╛рд░ Eratosthenes рдЪрд▓рдиреА рдЪрд▓рд╛рдиреЗ рдХреА рдХреНрдпрд╛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:


 $ ghc -O -rtsopts ./Monopig4.hs [1 of 1] Compiling Main ( Monopig4.hs, Monopig4.o ) Linking Monopig4 ... $ ./Monopig4 -RTS -sstderr "Ok" 68,243,040,608 bytes allocated in the heap 6,471,530,040 bytes copied during GC 2,950,952 bytes maximum residency (30667 sample(s)) 42,264 bytes maximum slop 15 MB total memory in use (7 MB lost due to fragmentation) Tot time (elapsed) Avg pause Max pause Gen 0 99408 colls, 0 par 2.758s 2.718s 0.0000s 0.0015s Gen 1 30667 colls, 0 par 57.654s 57.777s 0.0019s 0.0133s INIT time 0.000s ( 0.000s elapsed) MUT time 29.008s ( 29.111s elapsed) GC time 60.411s ( 60.495s elapsed) <--   ! EXIT time 0.000s ( 0.000s elapsed) Total time 89.423s ( 89.607s elapsed) %GC time 67.6% (67.5% elapsed) Alloc rate 2,352,591,525 bytes per MUT second Productivity 32.4% of total user, 32.4% of total elapsed 

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


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


 data VM a = VM { stack :: !Stack , status :: Maybe String , memory :: !Memory , journal :: !a } 

рд╣рдо рдХреБрдЫ рдФрд░ рдирд╣реАрдВ рдмрджрд▓реЗрдВрдЧреЗ рдФрд░ рддреБрд░рдВрдд рдкрд░рд┐рдгрд╛рдо рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВрдЧреЗ:


 $ ./Monopig41 +RTS -sstderr "Ok" 68,244,819,008 bytes allocated in the heap 7,386,896 bytes copied during GC 528,088 bytes maximum residency (2 sample(s)) 25,248 bytes maximum slop 16 MB total memory in use (14 MB lost due to fragmentation) Tot time (elapsed) Avg pause Max pause Gen 0 129923 colls, 0 par 0.666s 0.654s 0.0000s 0.0001s Gen 1 2 colls, 0 par 0.001s 0.001s 0.0006s 0.0007s INIT time 0.000s ( 0.000s elapsed) MUT time 13.029s ( 13.048s elapsed) GC time 0.667s ( 0.655s elapsed) EXIT time 0.001s ( 0.001s elapsed) Total time 13.700s ( 13.704s elapsed) %GC time 4.9% (4.8% elapsed) Alloc rate 5,238,049,412 bytes per MUT second Productivity 95.1% of total user, 95.1% of total elapsed 

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



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


рдЬреАрд╡рди рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рд╣реЛрдиреЗ рджреЗрдирд╛


Data.Vector рдкреНрд░рдХрд╛рд░ рдЕрдЪреНрдЫрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рд╣рдо рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреА рд╢реБрджреНрдзрддрд╛ рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рдирд╛рдо рдкрд░ рдирдХрд▓ рдХрд░рдиреЗ рдореЗрдВ рдмрд╣реБрдд рд╕рдордп рдмрд┐рддрд╛рддреЗ рд╣реИрдВред рдЗрд╕реЗ Data.Vector.Unpacked рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдкрд░ Data.Vector.Unpacked рд╣рдо рдХрдо рд╕реЗ рдХрдо рд╕рдВрд░рдЪрдирд╛ рдХреА рдкреИрдХреЗрдЬрд┐рдВрдЧ рдкрд░ рдмрдЪрдд рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдореВрд▓ рд░реВрдк рд╕реЗ рддрд╕реНрд╡реАрд░ рдХреЛ рдирд╣реАрдВ рдмрджрд▓рддрд╛ рд╣реИред рд╕рд╣реА рд╕рдорд╛рдзрд╛рди рдпрд╣ рд╣реЛрдЧрд╛ рдХрд┐ рдорд╢реАрди рдХреА рд╕реНрдерд┐рддрд┐ рд╕реЗ рдореЗрдореЛрд░реА рдХреЛ рд╣рдЯрд╛ рджреЗрдВ рдФрд░ рдХреНрд▓реЗрд╕реНрд▓реЗ рд╢реНрд░реЗрдгреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрд╛рд╣рд░реА рд╡реЗрдХреНрдЯрд░ рддрдХ рдкрд╣реБрдВрдЪ рдкреНрд░рджрд╛рди рдХрд░реЗрдВред рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ, рд╢реБрджреНрдз рд╡реИрдХреНрдЯрд░ рдХреЗ рд╕рд╛рде, рдЖрдк рддрдерд╛рдХрдерд┐рдд рдЙрддреНрдкрд░рд┐рд╡рд░реНрддрдиреАрдп ( Data.Vector.Mutable ) рд╡реИрдХреНрдЯрд░ Data.Vector.Mutable рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╡реИрдХреНрдЯрд░ред


рд╣рдо рдЙрдкрдпреБрдХреНрдд рдореЙрдбреНрдпреВрд▓ рдХреЛ рдЬреЛрдбрд╝реЗрдВрдЧреЗ рдФрд░ рдПрдХ рд╕реНрд╡рдЪреНрдЫ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рдкрд░рд╕реНрдкрд░ рдбреЗрдЯрд╛ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪреЗрдВрдЧреЗред


 import Control.Monad.Primitive import qualified Data.Vector.Unboxed as V import qualified Data.Vector.Unboxed.Mutable as M 

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


рд╕реНрд╡рдЪреНрдЫ рдорд╢реАрди рдХрд╛ рдкреНрд░рдХрд╛рд░ рдЫреЛрдЯрд╛ рд╣реЛрддрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ:


 data VM a = VM { stack :: !Stack , status :: Maybe String , journal :: !a } 

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


 type Memory m = M.MVector (PrimState m) Int type Logger ma = Memory m -> Code -> VM a -> m (VM a) type Program' ma = Logger ma -> Memory m -> Program ma 

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


 geti :: PrimMonad m => Int -> Program' ma geti i = programM (GETI i) $ \mem -> \s -> if (0 <= i && i < memSize) then \vm -> do x <- M.unsafeRead mem i setStack (x:s) vm else err "index out of range" puti :: PrimMonad m => Int -> Program' ma puti i = programM (PUTI i) $ \mem -> \case (x:s) -> if (0 <= i && i < memSize) then \vm -> do M.unsafeWrite mem ix setStack s vm else err "index out of range" _ -> err "expected an element" get :: PrimMonad m => Program' ma get = programM (GET) $ \m -> \case (i:s) -> \vm -> do x <- M.read mi setStack (x:s) vm _ -> err "expected an element" put :: PrimMonad m => Program' ma put = programM (PUT) $ \m -> \case (i:x:s) -> \vm -> M.write mix >> setStack s vm _ -> err "expected two elemets" 

рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝рд░ рдбреЗрдорди рдиреЗ рд╕реНрдореГрддрд┐ рдореЗрдВ рдЕрдиреБрдореЗрдп рд╕реВрдЪрдХрд╛рдВрдХ рдореВрд▓реНрдпреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдкрд░ рддреБрд░рдВрдд рдереЛрдбрд╝рд╛ рдФрд░ рдмрдЪрд╛рдиреЗ рдХреА рдкреЗрд╢рдХрд╢ рдХреА, рдХреНрдпреЛрдВрдХрд┐ puti рдФрд░ geti рд╕реВрдЪрдХрд╛рдВрдХреЛрдВ рдХреЛ рдХрд╛рд░реНрдпрдХреНрд░рдо рдирд┐рд░реНрдорд╛рдг рдХреЗ рдЪрд░рдг рдореЗрдВ рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЧрд▓рдд рдореВрд▓реНрдпреЛрдВ рдХреЛ рдЕрдЧреНрд░рд┐рдо рдореЗрдВ рд╕рдорд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдбрд╛рдпрдирд╛рдорд┐рдХ рд░реВрдк рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЗрдВрдбреЗрдХреНрд╕ рдХреЗ рд▓рд┐рдП put рдФрд░ рдХрдорд╛рдВрдб get рд╣реИрдВ рдЬреЛ рд╕реБрд░рдХреНрд╖рд╛ рдХреА рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рджреЗрддреЗ рд╣реИрдВ, рдФрд░ рдЧрдгрд┐рддрдЬреНрдЮ рдкрд░реА рдиреЗ рдЙрдиреНрд╣реЗрдВ рдЦрддрд░рдирд╛рдХ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреАред


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


рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рд╣рдордиреЗ рдЗрди рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдЦрд░реАрджрд╛:


 $ ./Monopig5 +RTS -sstderr "Ok" 9,169,192,928 bytes allocated in the heap 2,006,680 bytes copied during GC 529,608 bytes maximum residency (2 sample(s)) 25,248 bytes maximum slop 2 MB total memory in use (0 MB lost due to fragmentation) Tot time (elapsed) Avg pause Max pause Gen 0 17693 colls, 0 par 0.094s 0.093s 0.0000s 0.0001s Gen 1 2 colls, 0 par 0.000s 0.000s 0.0002s 0.0003s INIT time 0.000s ( 0.000s elapsed) MUT time 7.228s ( 7.232s elapsed) GC time 0.094s ( 0.093s elapsed) EXIT time 0.000s ( 0.000s elapsed) Total time 7.325s ( 7.326s elapsed) %GC time 1.3% (1.3% elapsed) Alloc rate 1,268,570,828 bytes per MUT second Productivity 98.7% of total user, 98.7% of total elapsed 

рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкреНрд░рдЧрддрд┐ рд╣реИ! рдореЗрдореЛрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдЖрда рдЧреБрдирд╛ рдХрдо рд╣реЛ рдЧрдпрд╛ рдерд╛, рдХрд╛рд░реНрдпрдХреНрд░рдо рдирд┐рд╖реНрдкрд╛рджрди рдХреА рдЧрддрд┐ 180 рдЧреБрдирд╛ рдмрдврд╝ рдЧрдИ, рдФрд░ рдХрдЪрд░рд╛ рдХрд▓реЗрдХреНрдЯрд░ рд▓рдЧрднрдЧ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХреЗ рдмрд┐рдирд╛ рдмрдирд╛ рд░рд╣рд╛ред



рд╕рдорд╛рдзрд╛рди рдореЛрдиреЛрдкрд┐рдЧ рд╕реЗрдВрдЯ рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛ ред mutред , рдЬреЛ js рдкрд░ рдореВрд▓ рд╕рдорд╛рдзрд╛рди рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рджрд╕ рдЧреБрдирд╛ рдзреАрдорд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдорд╕реНрдХрд▓ рд╡реИрдХреНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рд╣рд╛рд╕реНрдХреЗрд▓ рдкрд░ рдореВрд▓ рд╕рдорд╛рдзрд╛рдиред рдпрд╣рд╛рдБ рдЙрд╕рдХрд╛ рдХреЛрдб рд╣реИ:


 fill' :: Int -> Int -> Memory IO -> IO (Memory IO) fill' knm | n > memSize-k = return m | otherwise = M.unsafeWrite mn 1 >> fill' k (n+k) m sieve' :: Int -> Memory IO -> IO (Memory IO) sieve' km | k*k < memSize = do x <- M.unsafeRead mk if x == 0 then fill' k (2*k) m >>= sieve' (k+1) else sieve' (k+1) m | otherwise = return m 

рдпрд╣ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ


 main = do m <- M.replicate memSize 0 stimes 100 (sieve' 2 m >> return ()) print "Ok" 

рдФрд░ рдЕрдм рд╣рд╛рд╕реНрдХреЗрд▓ рдЕрдВрдд рдореЗрдВ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рд╡рд╣ рдПрдХ рдЦрд┐рд▓реМрдирд╛ рднрд╛рд╖рд╛ рдирд╣реАрдВ рд╣реИред рдмрд╕ рдЖрдкрдХреЛ рдЗрд╕реЗ рд╕рдордЭрджрд╛рд░реА рд╕реЗ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред рд╡реИрд╕реЗ, рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рдЗрд╕ рддрдереНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рдХрд╛рд░ IO () рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЗ рдЕрдиреБрдХреНрд░рдорд┐рдХ рдирд┐рд╖реНрдкрд╛рджрди (>>) рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд╕рд╛рде рдПрдХ stimes , рдФрд░ stimes рдХреА рдорджрдж рд╕реЗ рд╣рдордиреЗ рдкрд░реАрдХреНрд╖рдг рд╕рдорд╕реНрдпрд╛ рдХреА рдЧрдгрдирд╛ рдХреЛ 100 рдмрд╛рд░ рджреЛрд╣рд░рд╛рдпрд╛ред


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


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


рд╡рд╣рд╛рдВ рд░реБрдХрдирд╛ рдордд


рдЕрдирд╛рд╡рд╢реНрдпрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рдирд╛ рдФрд░ рдкреНрд░рд╛рдЧреНрдорд╛ {-# INLINE #-} рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реАрдзреЗ рдЙрдирдХреЗ рдХреЛрдб рдХреЛ рдПрдореНрдмреЗрдб рдХрд░рдирд╛ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреА рдЙрддреНрдкрд╛рджрдХрддрд╛ рдХреЛ рдереЛрдбрд╝рд╛ рдмрджрд▓рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ред рдпрд╣ рд╡рд┐рдзрд┐ рдкреБрдирд░рд╛рд╡рд░реНрддреА рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдкрдпреБрдХреНрдд рд╣реИ, рд▓реЗрдХрд┐рди рдмреБрдирд┐рдпрд╛рджреА рдШрдЯрдХреЛрдВ рдФрд░ рд╕реЗрдЯрд░ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдорд╣рд╛рди рд╣реИред рдпрд╣ рдкрд░реАрдХреНрд╖рдг рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд╕рдордп рдХреЛ 25% рдХрдо рдХрд░ рджреЗрддрд╛ рд╣реИ ( рдореЛрдиреЛрдкрд┐рдЧ51 рджреЗрдЦреЗрдВред)ред



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


 program code f = programM code (const f) programM code f (Just logger) mem = Program . ([code],) . ActionM $ \vm -> case status vm of Nothing -> logger mem code =<< f mem (stack vm) vm _ -> return vm programM code f _ mem = Program . ([code],) . ActionM $ \vm -> case status vm of Nothing -> f mem (stack vm) vm _ -> return vm 

рдЕрдм, рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЗрдВрдЧрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ none рд╕реНрдЯрдм рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓реЙрдЧрд┐рдВрдЧ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдпрд╛ рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдХреЛ рдЗрдВрдЧрд┐рдд рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди Maybe (Logger ma) рдкреНрд░рдХрд╛рд░ Maybe (Logger ma) ред рдпрд╣ рдХрд╛рдо рдХреНрдпреЛрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдпрджрд┐ рд▓реЙрдЧрд┐рдВрдЧ рд╣реИ рдпрд╛ рдирд╣реАрдВ, рддреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдШрдЯрдХ рдирд┐рд╖реНрдкрд╛рджрди рд╕реЗ рдкрд╣рд▓реЗ "рдЕрдВрддрд┐рдо рд╕рдордп рдкрд░" рдкрддрд╛ рд▓рдЧрд╛ рд▓реЗрдВрдЧреЗ? рдХреНрдпрд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрдВрдкреЛрдЬрд┐рдВрдЧ рдХреЗ рдЪрд░рдг рдореЗрдВ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдХреЛрдб рдХреЛ рд╕реАрд╡рди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛? рд╣рд╛рд╕реНрдХреЗрд▓ рдПрдХ рдЖрд▓рд╕реА рднрд╛рд╖рд╛ рд╣реИ рдФрд░ рдпрд╣рд╛рдВ рдпрд╣ рд╣рдорд╛рд░реЗ рд╣рд╛рдереЛрдВ рдореЗрдВ рдЦреЗрд▓рддреА рд╣реИред рдпрд╣ рдирд┐рд╖реНрдкрд╛рджрди рд╕реЗ рдкрд╣рд▓реЗ рд╣реИ рдХрд┐ рдЕрдВрддрд┐рдо рдХреЛрдб рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓рд┐рдд рд╣реИред рдЗрд╕ рдЕрдиреБрдХреВрд▓рди рдиреЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд╕рдордп рдХреЛ рдПрдХ рдФрд░ 40% рдХрдо рдХрд░ рджрд┐рдпрд╛ (рджреЗрдЦреЗрдВ рдореЛрдиреЛрдкрд┐рдЧ52 . hs )ред



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


рдХреБрдЫ рд╕рдорд╕реНрдпрд╛рдПрдВ рд▓реЙрдЧрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рд░рд╣рддреА рд╣реИрдВред рдЪрд░рдгреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреА рдПрдХ рд╕рд░рд▓ рдЧрдгрдирд╛ рдпрд╛ рд╕реНрдЯреИрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ (рд╣рдордиреЗ рд▓реЙрдЧ рдлрд╝реАрд▓реНрдб рдХреЛ рд╕рдЦреНрдд рдмрдирд╛ рджрд┐рдпрд╛ рд╣реИ), рд▓реЗрдХрд┐рди рдЙрдиреНрд╣реЗрдВ рдЬреЛрдбрд╝рдХрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдореЗрдореЛрд░реА рдЦрд╛рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ рд╣реИ, рдЖрдкрдХреЛ seq рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рдХ рдХреЗ рд╕рд╛рде рдЧрдбрд╝рдмрдбрд╝ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмрд╣реБрдд рдХрд╖реНрдЯрдкреНрд░рдж рд╣реИред рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдмрддрд╛рдЗрдП, 14 рдмрд┐рд▓рд┐рдпрди рдЪрд░рдгреЛрдВ рдореЗрдВ рдХреМрди рд▓реЙрдЧ рдХрд░реЗрдЧрд╛, рдпрджрд┐ рдЖрдк рдкрд╣рд▓реЗ рд╕реИрдХрдбрд╝реЛрдВ рдореЗрдВ рдХрд╛рд░реНрдп рдХреЛ рдбреАрдмрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЕрдкрдирд╛ рд╕рдордп рддреНрд╡рд░рдг рдХреЗ рд▓рд┐рдП рддреЗрдЬ рдХрд░рдиреЗ рдореЗрдВ рдирд╣реАрдВ рдмрд┐рддрд╛рдКрдВрдЧрд╛ред


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


тИЧ тИЧ тИЧ


рд╣рд╛рд╕реНрдХреЗрд▓ рдЗрдХреЛрд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдХрдИ Conduits рдФрд░ рддреЗрдЬрд╝ рд╕рдорд╛рдзрд╛рди рд╣реЛрддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐ Conduits рдпрд╛ Pipes рд╕реНрдЯреНрд░реАрдо, рдЙрддреНрдХреГрд╖реНрдЯ String рд░рд┐рдкреНрд▓реЗрд╕рдореЗрдВрдЯ рдФрд░ attoparsec html рдЬреИрд╕реЗ рдПрдХреНрд╕рдПрдордПрд▓ рдирд┐рд░реНрдорд╛рддрд╛ рд╣реИрдВ, рдФрд░ attoparsec (тИЮ) рд╡реНрдпрд╛рдХрд░рдг рдХреЗ рд▓рд┐рдП attoparsec рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд▓рд┐рдП attoparsec рдкрд╛рд░реНрд╕рд░ рдПрдХ рдорд╛рдирдХ рд╣реИред рдпрд╣ рд╕рдм рд╕рд╛рдорд╛рдиреНрдп рдСрдкрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИред рд▓реЗрдХрд┐рди рдЗрд╕рд╕реЗ рднреА рдЕрдзрд┐рдХ рдЖрд╡рд╢реНрдпрдХ рд╢реЛрдз рдЗрди рдлреИрд╕рд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдЧреНрд░рдгреА рд╣реИред рд╣рд╛рд╕реНрдХреЗрд▓ рд░рд╣рд╛ рд╣реИ рдФрд░ рдПрдХ рд╢реЛрдз рдЙрдкрдХрд░рдг рдмрдирд╛ рд╣реБрдЖ рд╣реИ рдЬреЛ рдЖрдо рдЬрдирддрд╛ рджреНрд╡рд╛рд░рд╛ рдЖрд╡рд╢реНрдпрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рдкреВрд░рд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдореИрдВрдиреЗ рдХрдордЪрдЯрдХрд╛ рдореЗрдВ рджреЗрдЦрд╛ рдХрд┐ рдХреИрд╕реЗ рдПрдХ рддрд░реНрдХ рдкрд░ Mi-4 рд╣реЗрд▓реАрдХреЙрдкреНрдЯрд░ рдХреЗ рдЗрдХреНрдХреЗ рдкрд░ рдорд╛рдЪрд┐рд╕ рдХреА рддреАрд▓рд┐рдпреЛрдВ рдХреЛ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛, рдФрд░ рд╣рд╡рд╛ рдореЗрдВ рд▓рдЯрдХрддреЗ рд╣реБрдП рдПрдХ рдкрд╣рд┐рдпрд╛ рдХреЗ рд╕рд╛рде рд▓реИрдВрдбрд┐рдВрдЧ рдЧрд┐рдпрд░ рдХреЛ рдзрдХреЗрд▓ рджрд┐рдпрд╛ред рдпрд╣ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИред


рд▓реЗрдХрд┐рди, рдлрд┐рд░ рднреА, рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реИ !!

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


All Articles