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

рдХреНрдпрд╛ рдЖрдкрдиреЗ рдХрднреА рдкреЛрдХреЗрдореЙрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реБрдирд╛ рд╣реИ? рдпреЗ рдЕрджреНрднреБрдд рдЬреАрд╡ рд╣реИрдВ рдЬреЛ рдкреЛрдХреЗрдореЙрди рд╡рд░реНрд▓реНрдб рдореЗрдВ рд░рд╣рддреЗ рд╣реИрдВред рдЖрдк рдорд╛рди рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╡реЗ рдЕрд╕рд╛рдзрд╛рд░рдг рдХреНрд╖рдорддрд╛рдУрдВ рд╡рд╛рд▓реЗ рдЬрд╛рдирд╡рд░реЛрдВ рдХреА рддрд░рд╣ рд╣реИрдВред рд╕рднреА рдкреЛрдХреЗрдореЙрди рддрддреНрд╡ рдХреЗ рдорд╛рд▓рд┐рдХ рд╣реИрдВ, рдФрд░ рдЙрдирдХреА рд╕рднреА рдХреНрд╖рдорддрд╛рдПрдВ рдЗрд╕ рддрддреНрд╡ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреА рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрдЧреНрдирд┐ рддрддреНрд╡ рдХрд╛ рдкреЛрдХреЗрдореЙрди рдЖрдЧ рдореЗрдВ рд╕рд╛рдВрд╕ рд▓реЗ рд╕рдХрддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рдЬрд▓ рддрддреНрд╡ рдХрд╛ рдкреЛрдХреЗрдореЙрди рдкрд╛рдиреА рдХреЗ рдЬреЗрдЯ рдХреЗ рд╕рд╛рде рд╕реНрдкреНрд░реЗ рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рдкреЛрдХреЗрдореЙрди рд▓реЛрдЧреЛрдВ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ, рдФрд░ рдЙрдирдХреА рд╡рд┐рд╢реЗрд╖ рдХреНрд╖рдорддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЙрддреНрдкрд╛рджрдХ рдЧрддрд┐рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд▓рд╛рдн рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреБрдЫ рд▓реЛрдЧ рдЕрдкрдиреЗ рдкреЛрдХреЗрдореЙрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдиреНрдп рд▓реЛрдЧреЛрдВ рдХреЛ рд▓рдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рддреЗ рд╣реИрдВред рдпреЗ рд▓реЛрдЧ рдЦреБрдж рдХреЛ рдкреЛрдХреЗрдореЙрди рдЯреНрд░реЗрдирд░ рдХрд╣рддреЗ рд╣реИрдВред рдпрд╣ рдкрд╣рд▓реА рдмрд╛рд░ рдореЗрдВ рдкрд╢реБ рдХреНрд░реВрд░рддрд╛ рдХреА рддрд░рд╣ рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдмрд╣реБрдд рдордЬрд╝реЗрджрд╛рд░ рд╣реИ рдФрд░ рд╣рд░ рдХреЛрдИ рдЦреБрд╢ рд╣реЛрдиреЗ рд▓рдЧрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдкреЛрдХреЗрдореЙрди рднреА рд╢рд╛рдорд┐рд▓ рд╣реИред рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ рдкреЛрдХреЗрдореЙрди рджреБрдирд┐рдпрд╛ рдореЗрдВ рд╕рдм рдХреБрдЫ рдХреНрд░рдо рдореЗрдВ рд▓рдЧрддрд╛ рд╣реИ, рднрд▓реЗ рд╣реА 10 рд╕рд╛рд▓ рдХреЗ рдмрдЪреНрдЪреЗ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдкреЛрдХреЗрдореЛрди рдЯреНрд░реЗрдирд░ рдмрдирдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдЬреАрд╡рди рдХреЛ рдЬреЛрдЦрд┐рдо рдореЗрдВ рдбрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдШрд░ рдЫреЛрдбрд╝ рджреЗрдВ, рдЬреИрд╕реЗ рдХрд┐ рдХреЛрдИ рднреА рдХрднреА рднреА рдПрдХ рдирд╣реАрдВ рдмрди рдЧрдпрд╛ рдерд╛ред
рд╣рдо рдкреЛрдХреЗрдореЙрди рджреБрдирд┐рдпрд╛ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдПрдХ рд╕реАрдорд┐рдд (рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдХреБрдЫ рд╣рдж рддрдХ рд╕рд░рд▓реАрдХреГрдд, рдкреНрд░рд╢рдВрд╕рдХреЛрдВ рдХреЛ рдореБрдЭреЗ рдорд╛рдл рдХрд░рдиреЗ рджреЗрдВ) рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рд╛рд╕реНрдХреЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВред
рдЕрд░реНрдерд╛рддреН:
- рдкреЛрдХреЗрдореЙрди рдореЗрдВ рдПрдХ рдкреНрд░рдХрд╛рд░ рдпрд╛ рддрддреНрд╡ рд╣реЛрддрд╛ рд╣реИ, рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдЧ, рдкрд╛рдиреА рдФрд░ рдШрд╛рд╕ рдХреЗ рд▓рд┐рдП рдЫрдВрдЯрдиреА рдХреА рдЬрд╛рддреА рд╣реИ
- рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдХреЗ рддреАрди рдкреЛрдХреЗрдореЛрди рд╣реИрдВ:
- рдЪрд╛рд░реНрдореЗрдВрдбрд░, рдЪрд╛рд░реНрдореЗрд▓рд┐рдпрди рдФрд░ рдЪрд╛рд░рд┐рдЬрд╝рд╛рд░реНрдб - рдлрд╛рдпрд░ рдкреЛрдХреЗрдореЙрди,
- рд╕реНрдХреНрд╡рд░реНрдЯрд▓, рд╡реЛрд░реНрдЯреЛрд░реНрдЯреЗрд▓ рдПрдВрдб рдж рдмреНрд▓реЛрд╕реНрдЯреЙрдпрдЬрд╝ - рдЬрд▓ рддрддреНрд╡,
- рдмреБрд▓рдмрдЬреНрд░, рдЗрдмреАрдЬрд╝реЛрд░рд╕ рдФрд░ рд╡реАрдиреЛрд╕реЙрд░рд╕ - рд╣рд░реНрдмрд▓ рддрддреНрд╡
- рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдХреА рдЕрдкрдиреА рдХреНрд╖рдорддрд╛рдПрдВ рд╣реЛрддреА рд╣реИрдВ, рдЬрд┐рдиреНрд╣реЗрдВ рдЧрддрд┐ рдпрд╛ рд╕реНрдЯреНрд░реЛрдХ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ: рд╡рд╛рдЯрд░ рдкреЛрдХреЗрдореЙрди рд╡рд╛рдЯрд░ рд╕реНрдЯреНрд░рд╛рдЗрдХ рдХрд░рддрд╛ рд╣реИ, рдлрд╛рдпрд░ рдкреЛрдХреЗрдореЛрди рдлрд╛рдпрд░ рд╕реНрдЯреНрд░рд╛рдЗрдХ, рдШрд╛рд╕ - рдШрд╛рд╕ рд╕реНрдЯреНрд░рд╛рдЗрдХ рдХрд░рддрд╛ рд╣реИ
- рд▓рдбрд╝рддреЗ рд╕рдордп, рдЖрдЧ рдкреЛрдХреЗрдореЙрди рд╣рдореЗрд╢рд╛ рдШрд╛рд╕ рдкреЛрдХреЗрдореЙрди рдХреЛ рд╣рд░рд╛ рджреЗрддрд╛ рд╣реИ, рдШрд╛рд╕ рдкреЛрдХреЗрдореЙрди рд╣рдореЗрд╢рд╛ рдкрд╛рдиреА рдкреЛрдХреЗрдореЛрди рдХреЛ рд╣рд░рд╛ рджреЗрддрд╛ рд╣реИ, рдФрд░ рдкрд╛рдиреА рдкреЛрдХреЗрдореЙрди рд╣рдореЗрд╢рд╛ рдлрд╛рдпрд░ рдкреЛрдХреЗрдореЙрди рдХреЛ рд╣рд░рд╛ рджреЗрддрд╛ рд╣реИ
- рдПрдХ рддрддреНрд╡ рдХрд╛ рдкреЛрдХреЗрдореЛрди рдХрднреА рднреА рд▓рдбрд╝рд╛рдИ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдЙрдирдореЗрдВ рд╕реЗ рдХреМрди рдЬреАрддреЗрдЧрд╛
- рдЕрдиреНрдп рд▓реЛрдЧреЛрдВ рдХреЛ рдЕрдкрдиреЗ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдкреЛрдХреЗрдореЛрди рдХреЗ рд╕рд╛рде рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рдлрд┐рд░ рд╕реЗ рднрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
- рдЯрд╛рдЗрдк рдЪреЗрдХрд░ (рджреБрднрд╛рд╖рд┐рдпрд╛ рдФрд░ рд╕рдВрдХрд▓рдХ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛) рд╣рдореЗрдВ рдирд┐рдпрдореЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП
рдкрд╣рд▓рд╛ рдкреНрд░рдпрд╛рд╕
рдкрд╣рд▓реЗ, рдЖрдЗрдП, рдкреНрд░рдХрд╛рд░ рд╡рд░реНрдЧ рдФрд░ рдкреНрд░рдХрд╛рд░ рдХреЗ рдкрд░рд┐рд╡рд╛рд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛ рдирд┐рдпрдореЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред
рдЖрдЗрдП рдкреЛрдХреЗрдореЙрди рдХреЗ рдХреБрдЫ рддрддреНрд╡реЛрдВ рдФрд░ рдЙрдирдХреЗ рдЖрдВрджреЛрд▓рдиреЛрдВ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░реЗрдВред рд╣рдо рдЕрд▓рдЧ рд╕реЗ рд▓рд╛рдЧреВ рдХрд░реЗрдВрдЧреЗ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рд╕реЗ рд╣рдореЗрдВ рдкреЛрдХреЗрдореЙрди рдХреЗ рдкреНрд░рдХрд╛рд░реЛрдВ рд╕реЗ рдЙрдирдХреЗ рдЖрдВрджреЛрд▓рдиреЛрдВ рдХреЛ рдЕрд▓рдЧ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдорд┐рд▓реЗрдЧреАред
рдЗрд╕ рдкреНрд░рдпреЛрдЬрди рдХреЗ рд▓рд┐рдП, рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рдкреЛрдХреЗрдореЙрди рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЙрд╕рдХреЗ рдЖрдВрджреЛрд▓рди рдХрд╛ рдЪрдпрди рдХрд░рдХреЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВрдЧреЗред
data Fire = Charmander | Charmeleon | Charizard deriving Show data Water = Squirtle | Wartortle | Blastoise deriving Show data Grass = Bulbasaur | Ivysaur | Venusaur deriving Show data FireMove = Ember | FlameThrower | FireBlast deriving Show data WaterMove = Bubble | WaterGun deriving Show data GrassMove = VineWhip deriving Show pickFireMove :: Fire -> FireMove pickFireMove Charmander = Ember pickFireMove Charmeleon = FlameThrower pickFireMove Charizard = FireBlast pickWaterMove :: Water -> WaterMove pickWaterMove Squirtle = Bubble pickWaterMove _ = WaterGun pickGrassMove :: Grass -> GrassMove pickGrassMove _ = VineWhip
рдЕрдм рддрдХ рдЕрдЪреНрдЫрд╛ рд╣реИ, рдЯрд╛рдЗрдк рдЪреЗрдХрд░ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреМрди рд╕рд╛ рдкреЛрдХреЗрдореЙрди рдЕрдкрдиреЗ рддрддреНрд╡ рдХрд╛ рд╕рд╣реА рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рд╡рд░реНрдгрд┐рдд 9 рдкреЛрдХреЗрдореЛрди рдореЗрдВ рд╕реЗ 6 рд╕рднреА рддреАрди рддрддреНрд╡реЛрдВ рдХреЗ рд╣реИрдВред рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП 2рдЕрдм рд╣рдореЗрдВ рд▓рдбрд╝рд╛рдИ рдХрд╛ рдПрд╣рд╕рд╛рд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рд▓рдбрд╝рд╛рдИ рдПрдХ рд╕рдВрджреЗрд╢ рдХрд╛ рдЖрдЙрдЯрдкреБрдЯ рд╣реЛрдЧреА рдЬреЛ рдпрд╣ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдкреЛрдХреЗрдореЙрди рд╣рд┐рдЯ рдХреИрд╕реЗ рдХрд░рддрд╛ рд╣реИ, рдлрд┐рд░ рд╡рд┐рдЬреЗрддрд╛ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░реЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕ рддрд░рд╣:
printBattle :: String -> String -> String -> String -> String -> IO () printBattle pokemonOne moveOne pokemonTwo moveTwo winner = do putStrLn $ pokemonOne ++ " used " ++ moveOne putStrLn $ pokemonTwo ++ " used " ++ moveTwo putStrLn $ "Winner is: " ++ winner ++ "\n"
рдпрд╣ рд╕рд┐рд░реНрдл рдЖрдВрджреЛрд▓рдиреЛрдВ рдХрд╛ рдкреНрд░рддрд┐рдмрд┐рдВрдм рд╣реИ, рд╣рдореЗрдВ рдЦреБрдж рд╡рд┐рдЬреЗрддрд╛ рдХреЛ рдЦреЛрдЬрдирд╛ рд╣реЛрдЧрд╛, рдЬреЛ рдкреЛрдХреЗрдореЛрди рдФрд░ рдЙрд╕рдХреЗ рд╡рд╛рд░ рдХреЗ рддрддреНрд╡реЛрдВ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИред рдпрд╣рд╛рдБ рдЖрдЧ рдФрд░ рдЬрд▓ рддрддреНрд╡реЛрдВ рдХреЗ рдмреАрдЪ рд▓рдбрд╝рд╛рдИ рдХреЗ рдХрд╛рд░реНрдп рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
battleWaterVsFire :: Water -> Fire -> IO () battleWaterVsFire water fire = do printBattle (show water) moveOne (show fire) moveTwo (show water) where moveOne = show $ pickWaterMove water moveTwo = show $ pickFireMove fire battleFireVsWater = flip battleWaterVsFire
рдпрджрд┐ рд╣рдо рдпрд╣ рд╕рдм рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдФрд░ рдЭрдЧрдбрд╝реЗ рдХреЗ рдЕрдиреНрдп рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдПрдХ рдХрд╛рд░реНрдпрдХреНрд░рдо рдорд┐рд▓реЗрдЧрд╛ред
рдЯрд╛рдЗрдк рдХреНрд▓рд╛рд╕реЗрд╕ рдХрд╛ рдкрд░рд┐рдЪрдп
рдХрд┐рддрдирд╛ рджреЛрд╣рд░рд╛рдпрд╛ рдХреЛрдб рд╣реИ: рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рдХреЛрдИ рдкреЛрдХреЗрдореЛрди рдЗрд▓реЗрдХреНрдЯреНрд░рд┐рдХ рддрддреНрд╡ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдкрд┐рдХрд╛рдЪреБ, рддреЛ рдЖрдкрдХреЛ рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛
battleElectricVs(Grass|Fire|Water)
рдЬреЛрдбрд╝рдирд╛
battleElectricVs(Grass|Fire|Water)
рдЭрдЧрдбрд╝реЗред рдРрд╕реЗ рдХрдИ рдЯреЗрдореНрдкрд▓реЗрдЯ рд╣реИрдВ рдЬреЛ рд╣рдореЗрдВ рдФрдкрдЪрд╛рд░рд┐рдХ рдмрдирд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдВрдЧреЗ рдФрд░ рд▓реЛрдЧреЛрдВ рдХреЛ рдпрд╣ рд╕рдордЭрдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдВрдЧреЗ рдХрд┐ рдкреЛрдХреЗрдореЙрди рдХреНрдпрд╛ рд╣реИ рдФрд░ рдирдП рд▓реЛрдЧреЛрдВ рдХреЛ рдХреИрд╕реЗ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдПред
рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреНрдпрд╛ рд╣реИ:
- рдкреЛрдХреЗрдореЙрди рдЖрдВрджреЛрд▓рди рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ
- рд▓рдбрд╝рд╛рдИ рдореЗрдВ рдПрдХ рд╡рд┐рдЬреЗрддрд╛ рдорд┐рд▓рддрд╛ рд╣реИ рдФрд░ рд▓рдбрд╝рд╛рдИ рдХрд╛ рд╡рд┐рд╡рд░рдг рдЫрд╛рдкрддрд╛ рд╣реИ
рд╣рдо рдФрдкрдЪрд╛рд░рд┐рдХрддрд╛ рдХреЗ рд▓рд┐рдП рдХрдИ рдкреНрд░рдХрд╛рд░ рдХреА рдХрдХреНрд╖рд╛рдУрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВрдЧреЗ, рдФрд░ рдПрдХ рдмрд╛рд░ рдЬрдм рд╣рдо рд╢рд╛рд╕рди рдХрд░реЗрдВрдЧреЗ, рддреЛ рд╣рдо рдЕрдм рдЕрд╕рд╛рдорд╛рдиреНрдп рдирд╛рдо рдпреЛрдЬрдирд╛ рдХрд╛ рднреА рдирд╛рдо рдмрджрд▓ рджреЗрдВрдЧреЗ, рдЬрд╣рд╛рдВ рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рд╡рд╣ рддрддреНрд╡ рд╢рд╛рдорд┐рд▓ рд╣реИ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рд╡рд╣ рд╕рдВрдЪрд╛рд▓рд┐рдд рд╣реЛрддрд╛ рд╣реИред
рдирд┐ рд╡рд░реНрдЧ
рдкреЛрдХреЗрдореЙрди рдХреНрд▓рд╛рд╕ рдХреЛ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдкреЛрдХреЗрдореЙрди рдиреЗ рдЕрдкрдирд╛ рдореВрд╡рдореЗрдВрдЯ рдЪреБрди рд▓рд┐рдпрд╛ рд╣реИред рдпрд╣ рд╣рдореЗрдВ
pickMove
рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛,
pickMove
рддрд╛рдХрд┐ рдПрдХ рд╣реА рдлрд╝рдВрдХреНрд╢рди рд╡рд┐рднрд┐рдиреНрди рддрддреНрд╡реЛрдВ рдкрд░ рдХрд╛рдо рдХрд░ рд╕рдХреЗ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рд╡рд░реНрдЧ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
"рд╡реЗрдирд┐рд▓рд╛" рд╡рд░реНрдЧреЛрдВ рдХреЗ рд╡рд┐рдкрд░реАрдд, рдкреЛрдХреЗрдореЛрди рдХреЗ рд╣рдорд╛рд░реЗ рд╡рд░реНрдЧ рдХреЛ 2 рдкреНрд░рдХрд╛рд░реЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА: рдкреЛрдХреЗрдореЛрди рдХреЗ рддрддреНрд╡ рдФрд░ рд╡реЗ рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рдиреБрдХрд╕рд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдмрд╛рдж рдореЗрдВ рдПрдХ рджреВрд╕рд░реЗ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░реЗрдЧрд╛ред рд╣рдореЗрдВ рдПрдХ рднрд╛рд╖рд╛ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдХрдХреНрд╖рд╛ рдореЗрдВ 2 рдорд╛рдкрджрдВрдбреЛрдВ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ:
MultiParamTypeClasses
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╣рдореЗрдВ рдРрд╕реЗ рдкреНрд░рддрд┐рдмрдВрдзреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ рдЬреЛ рдкреЛрдХреЗрдореЛрди рдФрд░ рдЙрдирдХреА рд╣рд┐рдЯ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдкреЛрдХреЗрдореЙрди рдХреЗ рдореМрдЬреВрджрд╛ рддрддреНрд╡реЛрдВ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд╕рд╛рде, рдпрд╣рд╛рдБ рдкрд░рд┐рднрд╛рд╖рд╛ рд╣реИред
class (Show pokemon, Show move) => Pokemon pokemon move where pickMove :: pokemon -> move instance Pokemon Fire FireMove where pickMove Charmander = Ember pickMove Charmeleon = FlameThrower pickMove Charizard = FireBlast instance Pokemon Water WaterMove where pickMove Squirtle = Bubble pickMove _ = WaterGun instance Pokemon Grass GrassMove where pickMove _ = VineWhip
рдФрд░ рд╣рдо рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдЗрд╕ рддрд░рд╣ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
pickMove Charmander :: FireMove
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЪреАрдЬреЗрдВ рдХреИрд╕реА рджрд┐рдЦрдиреА рд╢реБрд░реВ рд╣реЛрддреА рд╣реИрдВред рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рдХрд┐ рдкреЛрдХреЗрдореЙрди рддрддреНрд╡реЛрдВ рдФрд░ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЖрдВрджреЛрд▓рди рдХреЛ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдЯрд╛рдЗрдк рдХрдХреНрд╖рд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдХрд╣рддреЗ рд╣реБрдП рдХрд┐ рд╣рдо рдлрд╛рдпрд░ рд╕реНрдЯреНрд░рд╛рдЗрдХ рдЪреБрдирддреЗ рд╣реИрдВ, рд╣рдо рдЯрд╛рдЗрдк рдЗрдВрд╕реНрдкреЗрдХреНрдЯрд░ рдХреЛ рд╕рд╛рд░реА рдЬрд╛рдирдХрд╛рд░реА рджреЗрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рд╡рд╣ рдпрд╣ рддрдп рдХрд░реЗ рдХрд┐ рдХрд┐рд╕ рдХреНрд▓рд╛рд╕ рдФрд░ рд╕реНрдЯреНрд░реЛрдХ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдирд╛ рд╣реИред
рд▓рдбрд╝рд╛рдИ рдХрд╛ рд╡рд░реНрдЧ
рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкреЛрдХреЗрдореЛрди рд╣реИрдВ рдЬреЛ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдШреВрдВрд╕реЗ рдЪреБрди рд╕рдХрддреЗ рд╣реИрдВ, рдЕрдм рд╣рдореЗрдВ рдПрдХ рдЕрдореВрд░реНрдд рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬреЛ рджреЛ рдкреЛрдХреЗрдореЛрди рдХреА рд▓рдбрд╝рд╛рдИ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░реЗрдЧрд╛, рддрд╛рдХрд┐ рд▓рдбрд╝рд╛рдИ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП
battle*family*Vs*family
рдЬреИрд╕реЗ рдХрд╛рд░реНрдпреЛрдВ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдорд┐рд▓ рд╕рдХреЗред
рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреЛрдб рд▓рд┐рдЦрдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ:
class (Pokemon pokemon move, Pokemon foe foeMove) => Battle pokemon move foe foeMove where battle :: pokemon -> foe -> IO () battle pokemon foe = do printBattle (show pokemon) (show move) (show foe) (show foeMove) (show pokemon) where move = pickMove pokemon foeMove = pickMove foe instance Battle Water WaterMove Fire FireMove
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЕрдЧрд░ рд╣рдо рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдЯрд╛рдЗрдк рдЪреЗрдХрд░ рд╕реЗ рдПрдХ рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕реНрдЯреНрд░реЛрдХ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП рдХреЛрдИ рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рдЙрджрд╛рд╣рд░рдг рдирд╣реАрдВ рд╣реИред
рдпрд╣ рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рд╣реЛ рдЧрдИ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЕрдВрддрд┐рдо рдХреЛрдб рдмрджрд╕реВрд░рдд рджрд┐рдЦрддрд╛ рд╣реИ, рд╣рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд▓рдбрд╝рд╛рдИ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
battle :: pokemon -> foe -> IO (move, foeMove)
рдкреНрд░рдХрд╛рд░ рдкрд░рд┐рд╡рд╛рд░реЛрдВ рдХрд╛ рдкрд░рд┐рдЪрдп, рдЕрдВрдд рдореЗрдВ!
рдЦреИрд░, рд╣рдорд╛рд░рд╛ рдХрд╛рд░реНрдпрдХреНрд░рдо рдирд┐рд░рд╛рд╢рд╛рдЬрдирдХ рд▓рдЧ рд░рд╣рд╛ рд╣реИред рд╣рдореЗрдВ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рд╣рд╕реНрддрд╛рдХреНрд╖рд░реЛрдВ рдХрд╛ рдзреНрдпрд╛рди рд░рдЦрдирд╛ рд╣реЛрдЧрд╛, рдФрд░ рд╣рдо рдЕрдкрдиреЗ рдХрд╛рд░реНрдпреЛрдВ (
battle
) рдХреЗ рдЖрдВрддрд░рд┐рдХ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдмрд╛рдзреНрдп рд╣реИрдВ рддрд╛рдХрд┐ рд╣рдо рд╕рдВрдХрд▓рдХ рдХреА рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рдХрд╛рд░ рдХреЗ рд╣рд╕реНрддрд╛рдХреНрд╖рд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХреЗрдВред рдореИрдВ рдмрд╣реБрдд рдЖрдЧреЗ рдЬрд╛ рд╕рдХрддрд╛ рд╣реВрдВ рдФрд░ рдпрд╣ рдХрд╣ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣рдорд╛рд░реА рдмрд╣реБрдд рд╣реА рдФрдкрдЪрд╛рд░рд┐рдХ рдФрд░ рдХрдо рджреЛрд╣рд░рд╛рд╡ рд╡рд╛рд▓реА рдмрд╛рдд рд╣реИ, рдпрд╣ рдЗрддрдиреА рдЙрдкрд▓рдмреНрдзрд┐ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдордиреЗ рдХреЛрдб рдореЗрдВ рдЗрддрдирд╛ рдЕрдкрдорд╛рди рдкреЗрд╢ рдХрд┐рдпрд╛ рд╣реИред
рдЕрдм рд╣рдо рдкреЛрдХреЗрдореЙрди рдХреНрд▓рд╛рд╕ рдХреА рдЕрдкрдиреА рдкрд░рд┐рднрд╛рд╖рд╛ рдкрд░ рд╡рд╛рдкрд╕ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рдореЗрдВ рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡рд░реНрдЧ рдЪрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдкреЛрдХреЗрдореЙрди рдХрд╛ рддрддреНрд╡ рдФрд░ рд╕реНрдЯреНрд░реЛрдХ рдХрд╛ рдкреНрд░рдХрд╛рд░ рд╣реИред рдкреНрд░рдХрд╛рд░ рдЪреЗрдХрд░ рдХреЛ рдкреЛрдХреЗрдореЛрди рдХреЗ рддрддреНрд╡реЛрдВ рдФрд░ рд╕реНрдЯреНрд░реЛрдХ рдХреЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдмреАрдЪ рд╕рдВрдмрдВрдз рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрддрд╛ рдирд╣реАрдВ рд╣реИред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдпрд╣ рдЖрдкрдХреЛ Pokemon рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬрдм рд╡рд╛рдЯрд░ рдкреЛрдХреЗрдореЙрди рдлрд╛рдпрд░ рд╕реНрдЯреНрд░рд╛рдЗрдХ рдмрдирд╛рддрд╛ рд╣реИ!
рдпрд╣ рд╡рд╣ рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдВ рдЯрд╛рдЗрдк рдкрд░рд┐рд╡рд╛рд░ рдЪрд▓рди рдореЗрдВ рдЖрддреЗ рд╣реИрдВ: рдЙрдиреНрд╣реЛрдВрдиреЗ рдЯрд╛рдЗрдк рдЗрдВрд╕реНрдкреЗрдХреНрдЯрд░ рдХреЛ рдпрд╣ рдХрд╣рдиреЗ рджрд┐рдпрд╛ рдХрд┐ рдлрд╛рдпрд░ рдкреЛрдХреЗрдореЛрди рдХреЗрд╡рд▓ рдлрд╛рдпрд░ рд╕реНрдЯреНрд░рд╛рдЗрдХ рдЖрджрд┐ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рдкреЛрдХреЗрдореЙрди рд╡рд░реНрдЧ рдкреНрд░рдХрд╛рд░ рдкрд░рд┐рд╡рд╛рд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП
рдЯрд╛рдЗрдк
TypeFamilies
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ
TypeFamilies
рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдирд╛
TypeFamilies
ред рдЬреИрд╕реЗ рд╣реА рд╣рдо рдкреНрд▓рдЧ рдХрд░рддреЗ рд╣реИрдВ, рд╣рдо рдЕрдкрдиреА рдХрдХреНрд╖рд╛ рдХреЛ рдЗрд╕ рд╢реИрд▓реА рдореЗрдВ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
{-# LANGUAGE TypeFamilies, FlexibleContexts #-} class (Show p, Show (Move p)) => Pokemon p where data Move p :: * pickMove :: p -> Move p
рд╣рдордиреЗ рдЕрдкрдиреЗ рдкреЛрдХреЗрдореЙрди рдХреНрд▓рд╛рд╕ рдХреЛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдореЗрдВ рдПрдХ рддрд░реНрдХ рдФрд░ рдПрдХ рд╕рдВрдмрджреНрдз рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЖрдВрджреЛрд▓рди рд╣реИред рдЖрдВрджреЛрд▓рди рдХрд╛ рдкреНрд░рдХрд╛рд░ рдПрдХ "рдкреНрд░рдХрд╛рд░ рдХрд╛ рдХрд╛рд░реНрдп" рдмрди рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╕реНрдЯреНрд░реЛрдХ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рд▓реМрдЯрд╛рддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо
WaterMove
рдмрдЬрд╛рдп
Move Fire
рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ,
WaterMove
рд╕реНрдерд╛рди рдкрд░
Move Water
, рдЖрджрд┐
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдирд┐рд░реНрднрд░рддрд╛ рд▓рдЧрднрдЧ рдкрд┐рдЫрд▓реЗ рдорд╛рдорд▓реЗ рдХреА рддрд░рд╣ рд╣реА рджрд┐рдЦрддреА рд╣реИ, рдХреЗрд╡рд▓
Show move
рдмрдЬрд╛рдп рд╣рдо
Show (Move a))
рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рд╣рдореЗрдВ рдЗрд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рдЬреЛрдбрд╝ рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛:
FlexibleContexts
ред
рдЕрдм рд╣рд╛рд╕реНрдХреЗрд▓ рд╣рдореЗрдВ рдЙрддреНрдХреГрд╖реНрдЯ рд╕рд┐рдВрдЯреИрдХреНрдЯрд┐рдХ рдЪреАрдиреА рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЬрдм рд╣рдо рдЕрдкрдиреЗ рдЙрджрд╛рд╣рд░рдг рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рддреЛ рд╣рдо рджрд╛рдИрдВ рдУрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдВрдмрджреНрдз рдбреЗрдЯрд╛ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЖрдЗрдП рд╣рдорд╛рд░реЗ рд╕рднреА рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ рдФрд░ рдЯрд╛рдЗрдк рдкрд░рд┐рд╡рд╛рд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрд╡рд╢реНрдпрдХ рд╡рд░реНрдЧ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдПрдВред
data Fire = Charmander | Charmeleon | Charizard deriving Show instance Pokemon Fire where data Move Fire = Ember | FlameThrower | FireBlast deriving Show pickMove Charmander = Ember pickMove Charmeleon = FlameThrower pickMove Charizard = FireBlast data Water = Squirtle | Wartortle | Blastoise deriving Show instance Pokemon Water where data Move Water = Bubble | WaterGun deriving Show pickMove Squirtle = Bubble pickMove _ = WaterGun data Grass = Bulbasaur | Ivysaur | Venusaur deriving Show instance Pokemon Grass where data Move Grass = VineWhip deriving Show pickMove _ = VineWhip
рдЕрдм рд╣рдо рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ
pickMove Squirtle
рдФрд░ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред
рдпрд╣ рд╕реБрдВрджрд░ рд╣реИ, рд╣реИ рдирд╛? рдкрдВрдЪ рдЪреБрдирдиреЗ рдХреЗ рд▓рд┐рдП рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд▓рд┐рдЦрдиреЗ рдХреА рдЕрдзрд┐рдХ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рддреБрд▓рдирд╛ рдХрд░рдирд╛ рдмрд╣реБрдд рдЬрд▓реНрджреА рд╣реИред рдЬреЛ рдЖрдк рджреЗрдЦрддреЗ рд╣реИрдВ рдЙрд╕рдХрд╛ рдкреВрд░рд╛ рдкреНрд░рднрд╛рд╡ рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдВрддрд┐рдо рдкрд░рд┐рдгрд╛рдо рдХреА рддреБрд▓рдирд╛ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИред
рдиреНрдпреВ рдмреИрдЯрд▓ рдХреНрд▓рд╛рд╕
рдЕрдм рд▓рдВрдмреЗ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдк рдШреГрдгрд┐рдд рдмреИрд╕рд╛рдЦреА рдХреЛ рд╣рдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рд▓рдЧрднрдЧ рдореВрд▓ рдореВрд▓реНрдп рд╡рд╛рдкрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
class (Pokemon pokemon, Pokemon foe) => Battle pokemon foe where battle :: pokemon -> foe -> IO () battle pokemon foe = do printBattle (show pokemon) (show move) (show foe) (show foeMove) (show pokemon) where foeMove = pickMove foe move = pickMove pokemon
рдФрд░, рддреБрдо, рдЕрдм рд▓рдбрд╝рд╛рдИ рдЕрдм рд╣рдорд▓реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рднреА рдЬрд╛рдирдиреЗ рдХреА рдЬрд░реВрд░рдд рдирд╣реАрдВ рд╣реИред рдФрд░ рдкреЛрдХреЗрдореЛрди рдХреЛ рдкреАрдЯрддреЗ рд╣реБрдП рд▓рдЧрднрдЧ рднреЛрд▓реА рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИред
instance Battle Water Fire instance Battle Fire Water where battle = flip battle instance Battle Grass Water instance Battle Water Grass where battle = flip battle instance Battle Fire Grass instance Battle Grass Fire where battle = flip battle
рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рднреА рд╕рд░рд▓ рд╣реИ:
battle Squirtle Charmander
рд╡рд╣ рд╕рдм рд╣реИ! рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рдЕрдВрдд рдореЗрдВ рдПрдХ рд╢рд╛рдирджрд╛рд░ рдирдЬрд╝рд░ рдорд┐рд▓рд╛, рд╣рдордиреЗ рдЗрд╕рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд┐рдпрд╛, рдФрд░ рдЯрд╛рдЗрдк рдЪреЗрдХрд░ рдЕрдзрд┐рдХ рдЪреЗрдХ рдХрд░рддрд╛ рд╣реИ, рд╣рдо рдХрдо рджреЛрд╣рд░рд╛рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдЕрдиреНрдп рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдкреЗрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрд╡рдЪреНрдЫ рдПрдкреАрдЖрдИ рд╣реИред
рдХреВрд▓! рд╣рдордиреЗ рдХрд░ рджрд┐рдЦрд╛рдпрд╛! рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдпрд╣ рдкрд╕рдВрдж рдЖрдпрд╛ рд╣реЛрдЧрд╛!
рдареАрдХ рд╣реИ, рдареАрдХ рд╣реИред рдореБрдЭреЗ рдорд╣рд╕реВрд╕ рд╣реБрдЖ рдХрд┐ рдЖрдк рдордЬрд╝реЗрджрд╛рд░ рд╣реИрдВ рдФрд░ рдЖрдк рдпрд╣ рдирд╣реАрдВ рдорд╛рди рд╕рдХрддреЗ рдХрд┐ рд╕рдм рдХреБрдЫ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЦрддреНрдо рд╣реЛ рдЪреБрдХрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдЖрдкрдХреЗ рд╕реНрдХреНрд░реЙрд▓рдмрд╛рд░ рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рд╡рд╛рдХреНрдпрд╛рдВрд╢ рдХреЗ рдиреАрдЪреЗ рдЕрднреА рднреА рдПрдХ рдЬрдЧрд╣ рд╣реИред
рдареАрдХ рд╣реИ, рдЪрд▓реЛ рдкреЛрдХреЗрдореЙрди рд╡рд░реНрд▓реНрдб рдореЗрдВ рдПрдХ рдФрд░ рдЪреАрдЬ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред
рдЕрдм рд╣рдордиреЗ рдЕрдкрдиреЗ
Water
рдФрд░
Fire
рддрддреНрд╡реЛрдВ рдХреЛ
Battle Water Fire
рд░реВрдк рдореЗрдВ рдкрд╣рдЪрд╛рдирд╛ рд╣реИ, рдФрд░ рдлрд┐рд░
Battle Water Fire
рдкрд┐рдЫрд▓реЗ рд╡рд╛рд▓реЗ рдХреЗ рд╕рдорд╛рди рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рддрд░реНрдХреЛрдВ рдХреА рдЕрджрд▓рд╛-рдмрджрд▓реА рд╣реИред рдкрд╣рд▓рд╛ Pokemon рд╣рдореЗрд╢рд╛ рдЬреАрддрддрд╛ рд╣реИ, рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╣рдореЗрд╢рд╛ рдЖрдЙрдЯрдкреБрдЯ рд╣реЛрддрд╛ рд╣реИ:
рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЬрдм рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдкрд╣рд▓реЗ рд╣рд╛рд░рдиреЗ рд╡рд╛рд▓рд╛ рд╣реЛрддрд╛ рд╣реИ, рддрдм рднреА рд╡рд┐рдЬреЗрддрд╛ рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рд╕реНрдХреНрд░реАрди рдкрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрдЧрд╛ред
рдЖрдЗрдП рдЗрд╕реЗ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ, рдФрд░ рдирдореВрдиреЛрдВ рдХреЛ рддрдп рдХрд░рдиреЗ рджреЗрдВ рдХрд┐ рд▓рдбрд╝рд╛рдИ рдХреМрди рдЬреАрддрддрд╛ рд╣реИ, рдФрд░ рд╣рдо рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
рдПрд╕реЛрд╕рд┐рдПрдЯреЗрдб рдЯрд╛рдЗрдк рд╕рдорд╛рдирд╛рд░реНрдереА
рдЬрдм рд╣рдо рджреЛ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреА рдкрд╕рдВрдж рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓реЗрддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдЖрдорддреМрд░ рдкрд░
Either ab
рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рд░рди рдЯрд╛рдЗрдо рдореЗрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдЯрд╛рдЗрдк рдЪреЗрдХрд░ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЬрдм рддрддреНрд╡реЛрдВ рдореЗрдВ рдЖрдЧ рдФрд░ рдкрд╛рдиреА рдХреА рд▓рдбрд╝рд╛рдИ рд╣реЛ, рддреЛ рдкрд╛рдиреА рд╣рдореЗрд╢рд╛ рд╡рд┐рдЬреЗрддрд╛ рд╣реЛрдЧрд╛ред
рдЗрд╕рд▓рд┐рдП, рд╣рдо рд▓рдбрд╝рд╛рдИ рдореЗрдВ рдПрдХ рдирдпрд╛ рдлрд╝рдВрдХреНрд╢рди рдЬреЛрдбрд╝реЗрдВрдЧреЗ рдФрд░ рдЗрд╕реЗ
рд╡рд┐рдЬреЗрддрд╛ рдХрд╛ рдирд╛рдо рджреЗрдВрдЧреЗ, рдЬреЛ рдХрд┐ рдЙрд╕реА рдХреНрд░рдо рдореЗрдВ 2 рддрд░реНрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВрдЧреЗ рдЬреЛ рд▓рдбрд╝рд╛рдИ рдлрд╝рдВрдХреНрд╢рди рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдП рдЧрдП рдереЗ, рдФрд░ рддрдп рдХрд░реЗрдВрдЧреЗ рдХрд┐ рдХреМрди рдЬреАрддреЗрдЧрд╛ред
рд╣рд╛рд▓рд╛рдБрдХрд┐, рдХрдИ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рд╡рд╛рдкрд╕ рд▓реЗрдиреЗ рд╕реЗ рд╡рд┐рдЬреЗрддрд╛ рдХреЗ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд╛ рдЪреБрдирд╛рд╡ рдЕрдирд┐рд╢реНрдЪрд┐рдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
class Battle pokemon foe where .. winner :: pokemon -> foe -> ???
рдЖрдк рджреЗрдЦрддреЗ рд╣реИрдВ,
Battle Water Fire
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡рд┐рдЬреЗрддрд╛ рдкреНрд░рдХрд╛рд░
pokemon
рдХреЗ рд╕рдорд╛рди рд╣реИ, рдФрд░
Battle Fire Water
рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА
foe
ред
рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдЯрд╛рдЗрдк рдкрд░рд┐рд╡рд╛рд░ рднреА рд╕рдВрдмрдВрдзрд┐рдд рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рдорд╛рдирд╛рд░реНрдердХ рд╢рдмреНрдж рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВред рдмреИрдЯрд▓ рдХреНрд▓рд╛рд╕ рдореЗрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ
Winner pokemon foo
, рдФрд░ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рд╣рдо рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВрдЧреЗ рдХрд┐ рдЙрдирдореЗрдВ рд╕реЗ рдХреМрди рд╕рд╛ рд╣реЛрдЧрд╛ред рд╣рдо рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдбреЗрдЯрд╛ рдХрд╛ рдирд╣реАрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдХреЗрд╡рд▓
pokemon
рдпрд╛
foe
рд▓рд┐рдП рдПрдХ рдкрд░реНрдпрд╛рдп рд╣реИред
Winner
рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдкреНрд░рдХрд╛рд░ рдХрд╛ рдХрд╛рд░реНрдп рд╣реИ
* -> * -> *
, рдЬреЛ
pokemon
рдФрд░
foo
рджреЛрдиреЛрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рддрд╛ рд╣реИред
рд╣рдо рдПрдХ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рднреА рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВрдЧреЗ рдЬреЛ
pokemon
рдЪрдпрди рдХрд░реЗрдЧрд╛
class (Show (Winner pokemon foe), Pokemon pokemon, Pokemon foe) => Battle pokemon foe where type Winner pokemon foe :: *
рдЙрджрд╛рд╣рд░рдг рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдмрдирд╛рдП рдЧрдП рд╣реИрдВ:
instance Battle Water Fire where pickWinner pokemon foe = pokemon instance Battle Fire Water where type Winner Fire Water = Water pickWinner = flip pickWinner
рдЕрдм рдмрд╕ рдЗрддрдирд╛ рд╣реАред
рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛ рдЕрдВрддрд┐рдо рд╕рдВрд╕реНрдХрд░рдг рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
рдкреЛрдХреЗрдореЙрди рдХреА рд▓рдбрд╝рд╛рдИ рдХрд╛ рдЕрдВрддрд┐рдо рд╕рдВрд╕реНрдХрд░рдг {-# LANGUAGE TypeFamilies, MultiParamTypeClasses, FlexibleContexts #-} class (Show pokemon, Show (Move pokemon)) => Pokemon pokemon where data Move pokemon :: * pickMove :: pokemon -> Move pokemon data Fire = Charmander | Charmeleon | Charizard deriving Show instance Pokemon Fire where data Move Fire = Ember | FlameThrower | FireBlast deriving Show pickMove Charmander = Ember pickMove Charmeleon = FlameThrower pickMove Charizard = FireBlast data Water = Squirtle | Wartortle | Blastoise deriving Show instance Pokemon Water where data Move Water = Bubble | WaterGun deriving Show pickMove Squirtle = Bubble pickMove _ = WaterGun data Grass = Bulbasaur | Ivysaur | Venusaur deriving Show instance Pokemon Grass where data Move Grass = VineWhip deriving Show pickMove _ = VineWhip printBattle :: String -> String -> String -> String -> String -> IO () printBattle pokemonOne moveOne pokemonTwo moveTwo winner = do putStrLn $ pokemonOne ++ " used " ++ moveOne putStrLn $ pokemonTwo ++ " used " ++ moveTwo putStrLn $ "Winner is: " ++ winner ++ "\n" class (Show (Winner pokemon foe), Pokemon pokemon, Pokemon foe) => Battle pokemon foe where type Winner pokemon foe :: * type Winner pokemon foe = pokemon battle :: pokemon -> foe -> IO () battle pokemon foe = do printBattle (show pokemon) (show move) (show foe) (show foeMove) (show winner) where foeMove = pickMove foe move = pickMove pokemon winner = pickWinner pokemon foe pickWinner :: pokemon -> foe -> (Winner pokemon foe) instance Battle Water Fire where pickWinner pokemon foe = pokemon instance Battle Fire Water where type Winner Fire Water = Water pickWinner = flip pickWinner instance Battle Grass Water where pickWinner pokemon foe = pokemon instance Battle Water Grass where type Winner Water Grass = Grass pickWinner = flip pickWinner instance Battle Fire Grass where pickWinner pokemon foe = pokemon instance Battle Grass Fire where type Winner Grass Fire = Fire pickWinner = flip pickWinner main :: IO () main = do battle Squirtle Charmander battle Charmeleon Wartortle battle Bulbasaur Blastoise battle Wartortle Ivysaur battle Charmeleon Ivysaur battle Venusaur Charizard
рдЕрдм рдЖрдк рдЕрдкрдиреА рдЦреБрдж рдХреА Electric Pokemon рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ! рдЗрд╕реЗ рдЖрдЬрдорд╛рдЗрдП!
рдкреБрдирд╢реНрдЪ рдореВрд▓ рд▓реЗрдЦ рдкреНрд░рдХрд╛рд░ рдкрд░рд┐рд╡рд╛рд░реЛрдВ рдФрд░ рдирд┐
рд▓реЗрдЦ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЗрдВрдЯрд░рдПрдХреНрдЯрд┐рд╡ рдмрд╛рддрдЪреАрдд рдХреЗ рд▓рд┐рдП рдЕрднрд┐рдкреНрд░реЗрдд рд╣реИред