рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рдФрд░ рд╣рд╛рд╕реНрдХреЗрд▓ рднрд╛рд╖рд╛ рдореЗрдВ рдЬрдЯрд┐рд▓рддрд╛ рдФрд░ рдЕрддреНрдпрдзрд┐рдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдорд┐рдердХреЛрдВ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдореИрдВ рд╣рд╛рд╕реНрдХреЗрд▓ рдХреА рдиреНрдпреВрдирддрдо рд╕рдордЭ рд░рдЦрдиреЗ рд╡рд╛рд▓реЗ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рднреА рдЗрд╕ рд▓реЗрдЦ рдХреЛ рд╕рдордЭрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реВрдВрдЧрд╛ред рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ, рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рдкрд░рд┐рдЪрдпред
рдореИрдВ рдЦреБрдж рдХреЛ рдПрдХ рдЖрд▓рд╕реА рд╢реМрдХрд┐рдпрд╛ рдлреЛрдЯреЛрдЧреНрд░рд╛рдлрд░ рдорд╛рдирддрд╛ рд╣реВрдВред рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдЕрдЪреНрдЫрд╛ "рдорд┐рд░рд░рд▓реЗрд╕ рдорд┐рд░рд░" рд╣реИ, рдХрднреА-рдХрднреА рдореБрдЭ рдкрд░ рдореЗрд░реЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдХреБрдЫ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдХреА рдЗрдЪреНрдЫрд╛ рд╕реЗ рд╣рдорд▓рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореИрдВ рдЖрд▓рд╕реА рд╣реВрдВ, рдФрд░ рдлрд┐рд░ рдкрд░рд┐рдгрд╛рдореА рдлреЛрдЯреЛ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдЪрд╛рд░реЛрдВ рдУрд░ рдЭрд╛рдВрдХрдирд╛ рдореЗрд░реЗ рдкрд╛рд╕ рди рддреЛ рд╕рдордп рд╣реИ рдФрд░ рди рд╣реА рдЗрдЪреНрдЫрд╛ рд╣реИред рдПрдХ рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ, рдХреИрдорд░реЗ рдХреЛ рдПрдЪрдбреАрдПрдордЖрдИ рдХреЗрдмрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЯреАрд╡реА рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдХреЗ рд╢реВрдЯрд┐рдВрдЧ рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж рдПрдХ рдпрд╛ рджреЛ рдмрд╛рд░ рддрд╕реНрд╡реАрд░реЗрдВ рджреЗрдЦреА рдЬрд╛рддреА рд╣реИрдВред рддрдм рддрд╕реНрд╡реАрд░реЗрдВ
рдЧреБрдордирд╛рдореА ~ / рдЪрд┐рддреНрд░ / рддрд╕реНрд╡реАрд░реЗрдВ / рдЕрдирд╕реБрдиреА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЛ рднреЗрдЬ рджреА рдЬрд╛рддреА рд╣реИрдВ рдФрд░, рдПрдХ рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдореЗрд╢рд╛ рдХреЗ рд▓рд┐рдП рд╡рд╣реАрдВ рд░рд╣рддреА рд╣реИрдВред рд╡рд┐рднрд┐рдиреНрди рд╡рд┐рд╢реЗрд╖ рдХреЗ рд╕рд╛рдеред рдореИрдВрдиреЗ рдХрд┐рд╕реА рддрд░рд╣ рджреЛрд╕реНрдд рдирд╣реАрдВ рдмрдирд╛рдП, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЧрдбрд╝рдмрдбрд╝ рд▓рдЧрднрдЧ рджреЛ рд╕рд╛рд▓ рддрдХ рдЪрд▓реАред рдФрд░ рдЗрд╕рд▓рд┐рдП, рд╣рд╛рд╕реНрдХреЗрд▓ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ рдХреЗ рдорджреНрджреЗрдирдЬрд░, рдореИрдВ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░рд┐рдкрдХреНрд╡ рд╣реЛ рдЧрдпрд╛ рд╣реВрдВред
рддреНрдпрд╛рдЧ
рдореИрдВ рдПрдХ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдЧреБрд░реБ рд╣реЛрдиреЗ рдХрд╛ рджрд┐рдЦрд╛рд╡рд╛ рдирд╣реАрдВ рдХрд░рддрд╛, рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдЬреЛ рдХреЛрдб рдореИрдВрдиреЗ рд▓рд┐рдЦрд╛ рд╣реИ рд╡рд╣ рднрдпрд╛рдирдХ рд╣реИ (рдЖрдЦрд┐рд░рдХрд╛рд░, рдореИрдВ рдЕрдкрдиреЗ рдЦрд╛рд▓реА рд╕рдордп рдореЗрдВ рджреЛ рдорд╣реАрдиреЗ рд╕реЗ рдЕрдзрд┐рдХ рдХреЗ рд▓рд┐рдП рд╣рд╛рд╕реНрдХреЗрд▓ рдХреЛ рдХрд░реАрдм рд╕реЗ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ), рдФрд░ рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рд▓реЗрдЦ рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдпрд╣ рджрд┐рдЦрд╛рдирд╛ рд╣реИ рдХрд┐ рд╣рд╛рд╕реНрдХреЗрд▓ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЙрджреНрджреЗрд╢реНрдп рд╡рд╛рд▓реА рднрд╛рд╖рд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХреЗрд╡рд▓ рдмреБрд░реЗ рд╕рдкрдиреЗ рдФрд░ рдЬрдЯрд┐рд▓ рдЧрдгрд┐рддреАрдп рдЧрдгрдирд╛ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдХрд╛рдлреА рд╕рд╛рдВрд╕рд╛рд░рд┐рдХ, рд░реЛрдЬрдорд░реНрд░рд╛ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рднреА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдФрд░ рдЙрдирд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рд▓рд┐рдПред
рдореИрдВ рдРрд╕реЗ рд╡рд┐рд╢реЗрд╖ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЗ рдЕрд╕реНрддрд┐рддреНрд╡ рд╕реЗ рдЕрд╡рдЧрдд рд╣реВрдВ рдЬреЛ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдПрдХ рд╕рд░рд▓, рдмреБрдирд┐рдпрд╛рджреА рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА рдЬреЛ рдореБрдЭреЗ рд╡рд╣реА рдЪрд╛рд╣рд┐рдПред рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдХреБрдЫ рдорд╛рд░ рдпрд╛ рдЧрдбрд╝рдЧрдбрд╝рд╛рд╣рдЯ рдкрд░ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд▓реЗрдЦрдХ рдХреА рдкрд╕рдВрдж рд╣реИ, рдЕрд░реНрдерд╛рддреНред
рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рд▓рдВрдмреА рд╢реБрд░реБрдЖрдд рдХрд╛ рдЕрдВрддрд┐рдо рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рд╣рд╛рд╕реНрдХреЗрд▓ рдХрд╛ рдмреБрдирд┐рдпрд╛рджреА рдЬреНрдЮрд╛рди рд╣реЛрдирд╛ рд╡рд╛рдВрдЫрдиреАрдп рд╣реИ, рдЕрдиреНрдпрдерд╛ рдмрд╣реБрдд рдХреБрдЫ рд╕рдордЭ рд╕реЗ рдмрд╛рд╣рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рднрд┐рдХреНрд╖реБрдУрдВ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рд░рдЦрдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореИрдВ рдкреНрд░рд╕реНрддреБрддрд┐ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ "рд╕реВрдХреНрд╖реНрдо" рдмрд┐рдВрджреБрдУрдВ рдХреЛ рд╕рдордЭрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛, рдФрд░ рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдХреБрдЫ рдкреНрд░рдпрд╛рд╕реЛрдВ рдХреЗ рд╕рд╛рде рд╣рд░ рдХреЛрдИ рдЗрд╕ рд▓реЗрдЦ рдХреЛ рд╕рдордЭ рдЬрд╛рдПрдЧрд╛ред
рджреВрд╕рд░реЗ, рдЖрд╡рд╢реНрдпрдХ рдЙрдкрдХрд░рдгред рдпрд╣ рдЖрдЧреЗ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рд╕рднреА рдШрдЯрдирд╛рдПрдВ рд▓рд┐рдирдХреНрд╕ рдорд╢реАрди рдкрд░ рд╕рд╛рдордиреЗ рдЖрддреА рд╣реИрдВ, рд▓реЗрдХрд┐рди рдорд╛рдореВрд▓реА рдмрджрд▓рд╛рд╡реЛрдВ рдХреЗ рд╕рд╛рде, рдпрд╣ рд╕рдм рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рд▓рд┐рдП рд╕рдЪ рд╣реИ, рдФрд░ рдореИрдХ рдУрдПрд╕ рдПрдХреНрд╕ рдХреЗ рд▓рд┐рдП рдФрд░ рднреА рдмрд╣реБрдд рдХреБрдЫред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рддреАрди рдЪреАрдЬреЗрдВ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП:
- рдЕрдкрдиреЗ рд╡рд┐рддрд░рдг рдХреЗ рднрдВрдбрд╛рд░ рд╕реЗ рд╣рд╛рд╕реНрдХреЗрд▓ рдордВрдЪ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдФрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ;
- EXIF рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рд╛рд╕реНрдХреЗрд▓ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ:
sudo cabal install --global exif
; - GTK + \ Glade рдФрд░ рд╣рд╛рд╕реНрдХреЗрд▓ рдХреЗ рд▓рд┐рдП рд╕рдВрдмрдВрдзрд┐рдд рдмрд╛рдЗрдВрдбрд┐рдВрдЧ
sudo cabal install --global glade
: sudo cabal install --global glade
ред
рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдмрдпрд╛рди
рдЗрд╕рд▓рд┐рдП, рдореБрдЭреЗ рд╕рдВрдмрдВрдзрд┐рдд рдлрд╝реЛрд▓реНрдбрд░реЛрдВ рдореЗрдВ рддрд╛рд░реАрдЦ рддрдХ "рдкреИрдХрд┐рдВрдЧ" рдлреЛрдЯреЛ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рд╕рд░рд▓ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА, рдЬрд┐рд╕реЗ рдПрдХ рддрд╛рдЬрд╛ рдЬреБрдбрд╝реЗ рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рд▓рд┐рдП рдФрд░ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рддрд╕реНрд╡реАрд░реЛрдВ рдХреЗ рд╕рд╛рде рдореМрдЬреВрджрд╛ рд╕рдВрдЧреНрд░рд╣ рдХреЛ рд╕реЙрд░реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреЛрдиреЛрдВ рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рд╕рдм рдХреБрдЫ, рдХреБрдЫ рднреА рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рд╣реИред
рд╣рдо рдХреИрд╕реЗ рддрдп рдХрд░реЗрдВрдЧреЗ
рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реИред рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рджреЛ рдореЛрдбреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
- "рд╕реНрд╡рдЪрд╛рд▓рд┐рдд" - рдЬрдм рд╕реНрдХреИрди рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЛ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдХреЗ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ;
- "рдореИрдиреБрдЕрд▓" - рдЬрдм рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЬреАрдпреВрдЖрдИ рд╕реАрдорд╛ рд╢реБрд░реВ рдХреА рдЬрд╛рддреА рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╣рдо рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХрд╛ рдЪрдпрди рдХрд░рддреЗ рд╣реИрдВред
рд╕рд╛рдорд╛рдиреНрдпрддрдпрд╛, GUI рдпрд╣рд╛рдБ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдЖрдкрдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛рддрд╛ рд╣реВрдБ рдХрд┐ рдпрд╣ рдПрдХ рдРрд╕рд╛ рдЫреЛрдЯрд╛ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдЙрджрд╛рд╣рд░рдг рд╣реИ рдЬреЛ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рджрд┐рдЦрд╛рдПрдЧрд╛ рдХрд┐ Haskell рдореЗрдВ GUI рдХрднреА рднреА рдбрд░рд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХрд┐ рдХреИрдЯрд▓реЙрдЧ рд╣рдореЗрдВ рдХреИрд╕реЗ рдлрд┐рд╕рд▓ рдЧрдпрд╛, рд╣рдо рдЗрд╕ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ (рд╕рднреА рдЙрдкрдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдХреЛ рджрд░рдХрд┐рдирд╛рд░ рдХрд░рддреЗ рд╣реБрдП, рдХреНрдпреЛрдВрдХрд┐ рдХрдИ рдХреИрдорд░реЗ (рдпрджрд┐ рд╕рднреА рдирд╣реАрдВ) рдзреНрдпрд╛рди рд╕реЗ рдлреЛрдЯреЛ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдлреЛрдЯреЛ рдбрд╛рд▓рддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдХреБрдЫ 100PANA, 101PANA, рдЖрджрд┐ рдореЗрдВ)ред .pред) рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░реЗрдВред
рдкреНрд░рддреНрдпреЗрдХ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдирд╛ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ: рд╣рдо Exif рдбреЗрдЯрд╛ рдкрдврд╝рддреЗ рд╣реИрдВ рдФрд░ рдпрджрд┐ рдХреЛрдИ рд╣реИ, рддреЛ рд╣рдо рдЗрд╕реЗ (рдлреЛрдЯреЛ рдлрд╝рд╛рдЗрд▓) рдХреЛ рдХреЙрдкреА рдХрд┐рдП рдЧрдП рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЗ рдЕрдиреБрд░реВрдк рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдХреЙрдкреА рдХрд░рддреЗ рд╣реИрдВред
рд╣рдо рдЗрд╕реЗ рдЪрд╛рд╣рддреЗ рдереЗ рдпрд╛ рдирд╣реАрдВ, рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рдХреНрдпрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, рд╣рдордиреЗ рдЗрд╕рдХреЗ рддреАрди рдореБрдЦреНрдп
рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛:
- рдХрд╛рд░реНрдпрдХреНрд░рдо рдЪрд▓рд╛рдирд╛ рдФрд░ рддрд░реНрдХреЛрдВ рдХреА рдЬрд╛рдБрдЪ рдХрд░рдирд╛;
- рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдЯреНрд░реИрд╡рд░реНрд╕рд▓;
- рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдлрд╝рд╛рдЗрд▓ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдгред
рдЕрдм рдХреБрдЫ рд╕реЛрд░реНрд╕ рдХреЛрдб рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред
рдХреЛрдб рдХреЗ рдХрд░реАрдм
рдЧреАрддрд╛рддреНрдордХ рд╡рд┐рд╖рдпрд╛рдВрддрд░ред рд╣рд╛рд╕реНрдХреЗрд▓ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдореЗрдВ рд╕реА рдХреА рддрд░рд╣ рдПрдХ рдореЙрдбреНрдпреВрд▓рд░ рд╕рдВрд░рдЪрдирд╛ рд╣реЛрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рднрдпрд╛рдирдХ рд╣реЗрдбрд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рдмрд┐рдирд╛ред рдирд┐рд░реНрдпрд╛рдд (рдмрд╛рд╣рд░реА) рдлрд╝рдВрдХреНрд╢рди рдореЙрдбреНрдпреВрд▓ рд╡рд┐рд╡рд░рдг рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╣реИрдВ, рдлрд┐рд░ рдЕрдиреНрдп рдореЙрдбреНрдпреВрд▓ рдФрд░ рдХреЛрдб рдХреЗ рдЖрдпрд╛рдд рд╣реИрдВред рд╣рд╛рд╕реНрдХреЗрд▓ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдореЗрдВ рдХреЗрд╡рд▓ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░реЛрдВ рдФрд░ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рд╡рд┐рд╡рд░рдг рд╣реЛрддрд╛ рд╣реИред рд╡рд╣ рд╕рдм рд╣реИред
рддреЛ, рдЪрд▓рд┐рдП рдлрд┐рд░ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдЕрд░реНрдерд╛рддреН, рдореБрдЦреНрдп рдореЙрдбреНрдпреВрд▓ рдХреЗ рдореБрдЦреНрдп рдХрд╛рд░реНрдп рдХреЗ рд╕рд╛рде (рдЖрдЦрд┐рд░рдХрд╛рд░, рдпрд╣ рдЗрд╕рдХреЗ рд╕рд╛рде рд╣реИ рдХрд┐ рдХрд╛рд░реНрдпрдХреНрд░рдо рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ)ред рдпрд╣рд╛рдБ рдкреВрд░реЗ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд▓рд┐рдП рдХреЛрдб рд╣реИ
рдореБрдЦреНрдп:
- рдореЙрдбреНрдпреВрд▓ рдореБрдЦреНрдп рдЬрд╣рд╛рдВ
- рдЖрдпрд╛рдд рдкреНрд░рдгрд╛рд▓реА (getArgs)
- рдЖрдпрд╛рдд рдкреНрд░рдмрдВрдзрдХ
- рдЬреАрдпреВрдЖрдИ рдЖрдпрд╛рдд рдХрд░реЗрдВ
- рдореБрдЦреНрдп :: IO ()
- рдореБрдЦреНрдп = getArgs >> = рд▓реЙрдиреНрдЪ
- - рддрд╕реНрд╡реАрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдорд╛рд░реНрдЧ рдХреЗ рд╕рд╛рде рдПрдХ рд╣реА рддрд░реНрдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЕрдиреНрдпрдерд╛ рдЧреБрдиреА рдЪрд▓рд╛рдПрдВ
- рд▓реЙрдиреНрдЪ :: [рд╕реНрдЯреНрд░рд┐рдВрдЧ] -> IO ()
- рд▓реЙрдиреНрдЪ [рдПрдХреНрд╕] = рдкреНрд░рдХреНрд░рд┐рдпрд╛рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдПрдХреНрд╕
- рд▓реЙрдиреНрдЪ _ = startGUI
* рдЗрд╕ рд╕реЛрд░реНрд╕ рдХреЛрдб рдХреЛ рд╕реЛрд░реНрд╕ рдХреЛрдб рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд░ рдХреЗ рд╕рд╛рде рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдореИрдВ рдЕрдкрдиреЗ рдкрд╣рд▓реЗ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╡рд┐рд╡рд░рдг рдкрд░ рдереЛрдбрд╝рд╛ рдФрд░ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдмрддрд╛рдКрдВрдЧрд╛, рдЬрд┐рд╕рдореЗрдВ рдореБрдЦреНрдп рдмрд╛рддреЛрдВ рдХрд╛ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рд╣реЛрдЧрд╛ред рддреЛ, рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рд╡рд░реНрдгрди рд╣реИред рдЕрдЧрд▓рд╛ рдЖрдпрд╛рдд рд░реЗрдЦрд╛ рд╣реИ (рдХреЗрд╡рд▓ getArgs рдлрд╝рдВрдХреНрд╢рди рд╕рд┐рд╕реНрдЯрдо рдореЙрдбреНрдпреВрд▓ рд╕реЗ рдЖрдпрд╛рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдлрд╝рд╛рдЗрд▓
рдХреЗ рдирд╛рдо рдХреЗ
рдмрд┐рдирд╛ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рддрд░реНрдХреЛрдВ рдХреА рд╕реВрдЪреА рд▓реМрдЯрд╛рддрд╛ рд╣реИ)ред рдкреНрд░рдмрдВрдзрдХ рдФрд░ рдЬреАрдпреВрдЖрдИ рдореЙрдбреНрдпреВрд▓ рдмрд╛рдж рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗред
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд
main
рдХрд╛рд░реНрдп рдХрд╛ рд╡рд┐рд╡рд░рдг рд╣реИред рд╡рд┐рд╡рд░рдг рдХреА рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐ рдкреНрд░рдХрд╛рд░ рдХреА рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рдкрд░рд┐рднрд╛рд╖рд╛ рд╣реИ, рдЖрдо рддреМрд░ рдкрд░ рдмреЛрд▓рдирд╛, рдпрд╣ рд╣рдореЗрд╢рд╛ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдЕрдзрд┐рдХрд╛рдВрд╢ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рдЖрдкреВрд░реНрддрд┐ рдХрд┐рдП рдЧрдП рддрд░реНрдХреЛрдВ рдХреЗ рдкреНрд░рдХрд╛рд░ рд╕реЗ рдХрдЯреМрддреА рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдХреЛ
рд╕рдореАрдХрд░рдгреЛрдВ рдХреА рдПрдХ
рдкреНрд░рдгрд╛рд▓реА рджреНрд╡рд╛рд░рд╛ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛
рд╣реИ , рдФрд░ рджреВрд╕рд░реА рдкрдВрдХреНрддрд┐ рд╡рд╣ рд╕рдореАрдХрд░рдг рд╣реИред
рдЧреАрддрд╛рддреНрдордХ рд╡рд┐рд╖рдпрд╛рдВрддрд░ред рдФрдкрдЪрд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ, рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯ рд╣реЛрдиреЗ рдкрд░ рд╕реНрд╡рдЪреНрдЫ рдФрд░ "рдЧрдВрджреЗ" рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдореИрдВ рдЙрдБрдЧрд▓рд┐рдпреЛрдВ рдкрд░ рд╕рдордЭрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдБрдЧрд╛ред
рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреНрд▓реАрди рд╣реИ рдпрджрд┐ рдпрд╣ рд╕рдорд╛рди рдЖрдЙрдЯрдкреБрдЯ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рд╕рдорд╛рди рдЖрдЙрдЯрдкреБрдЯ рдбреЗрдЯрд╛ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдХрднреА рднреА рд╕рд┐рд╕реНрдЯрдо рдХреА рдХрд┐рд╕реА рднреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдирд╣реАрдВ рдмрджрд▓рддрд╛ рд╣реИ рдФрд░ рдЙрди рдкрд░ рдирд┐рд░реНрднрд░ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ (рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдХреА рд╕реНрдерд┐рддрд┐ рд╣реИ, рдпрд╛ рдПрдХ рдУрдкрди рдЯреАрд╕реАрдкреА рдХрдиреЗрдХреНрд╢рди рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рд╣реИ)ред рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рдХрд╛рд░реНрдп рдХрд░реЗрдВред рдпрд╣ рджреЛ рддрд░реНрдХ рд▓реЗрддрд╛ рд╣реИ, рдФрд░ рдпрджрд┐ рдпреЗ рджреЛрдиреЛрдВ рддрд░реНрдХ рд╕рдВрдЦреНрдпрд╛ 2 рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИрдВ, рддреЛ рдЖрдЙрдЯрдкреБрдЯ рдкрд░ рд╣рдо рд╣рдореЗрд╢рд╛ (рд╣рдореЗрд╢рд╛ рд╣рдореЗрд╢рд╛) рдирдВрдмрд░ 4 рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВрдЧреЗред рдФрд░ рд╣рд╛рдБ, рдЯреАрд╕реАрдкреА рдХрдиреЗрдХреНрд╢рди рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдХрд╛рд░реНрдп рдирд╣реАрдВ рдЦреБрд▓рддрд╛ рд╣реИред
рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯреНрд╕ рд╡рд╛рд▓реЗ рдХрд╛рд░реНрдп рдПрдХ рдЕрд▓рдЧ рдмрд╛рддрдЪреАрдд рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рдХреЗрд╡рд▓
рдЗрдирдкреБрдЯ / рдЖрдЙрдЯрдкреБрдЯ рдореЛрдирдб (IO monad) рдирд╛рдордХ рдПрдХ рдореЙрдбрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд┐рд╕реА рднреА рдмрд╛рд╣рд░реА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдкрд░ рдХрд╛рд░реНрдпреЛрдВ рдХреА рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдзрд╛рд░рдгрд╛ рдХреА рд╕рд╛рджрдЧреА рдХреЗ рд▓рд┐рдП, рдЗрд╕ рд╕рдордп рд╣рдо рдХреЗрд╡рд▓ "рдЗрдирдкреБрдЯ / рдЖрдЙрдЯрдкреБрдЯ" рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдордареЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪреЗрдВрдЧреЗ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рдЕрд╡рдзрд╛рд░рдгрд╛ рдмрд╣реБрдд рд╡реНрдпрд╛рдкрдХ рд╣реИ)ред рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯ рдХреЗ рд╕рд╛рде рдПрдХ рдлрд╝рдВрдХреНрд╢рди
рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рдЕрдиреБрдХреНрд░рдо рдХрд╛ рд╡рд┐рд╡рд░рдг рд╣реИ, рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рд╣рдо рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдкрд░рд┐рдгрд╛рдо рдореВрд▓реНрдп рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред рдПрдХ рдЙрджрд╛рд╣рд░рдг:
readFile :: FilePath -> IO (String)
рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рджрд┐рдП рдЧрдП рдкрде рдкрд░ рдлрд╝рд╛рдЗрд▓ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИред рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ, рдпрд╣ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдирд╣реАрдВ рд╣реИ, рдпрд╣ рдЗрд╕рдХрд╛ рдкреНрд░рдХрд╛рд░ рд╣реИред рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рдкрдврд╝рдирд╛ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ, рдкрд╣рд▓реЗ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдирд╛рдо рдЖрддрд╛ рд╣реИ, рдлрд┐рд░ рдкреНрд░рддреАрдХ рдХреЗ рд╕рд╛рде рджреЛ рдХреЙрд▓рди рдХреЗ рдмрд╛рдж -> рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рддрд░реНрдХ рдЕрд▓рдЧ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдЪрд░рдо рдХреЗ рдмрд╛рдж -> рд╡рд╛рдкрд╕реА рдорд╛рди рдХрд╛ рдкреНрд░рдХрд╛рд░ рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рдПрдХ рдЖрджрд┐рдо рд╡рд░реНрдгрди рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрднреА рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред рдпрд╣реА рд╣реИ, рдпрд╣ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдлрд╝рдВрдХреНрд╢рди рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдлрд╝рд╛рдЗрд▓рдкреИрде рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ рдФрд░
рдПрдХ рдЗрдирдкреБрдЯ / рдЖрдЙрдЯрдкреБрдЯ рдПрдХреНрд╢рди рджреЗрддрд╛ рд╣реИ , рдЬрд┐рд╕рдХрд╛ рдирд┐рд╖реНрдкрд╛рджрди рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореВрд▓реНрдп рджреЗрдЧрд╛ред
рдпрд╣ рд╕рдордЭрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдХреНрд░рд┐рдпрд╛рдУрдВ рдХрд╛ рдХреНрд░рдо! = рдЧрдгрдирд╛рдУрдВ рдХрд╛ рдХреНрд░рдоред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ,
рд╣рдо рдЖрдо рддреМрд░ рдкрд░ рдпрд╣ рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЧрдгрдирд╛
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд┐рд╕ рдХреНрд░рдо рдореЗрдВ рд╣реЛрдЧреА, рд╣рдо рдХреЗрд╡рд▓ рдЙрди рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдХреНрд░рдо рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рд╡реЗ рдкреАрдЫреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рдЗрд╕ рддрд░рд╣ рдХреЗ рдЕрдореВрд░реНрдд рдХреЗ рд░реВрдк рдореЗрдВ рднрд┐рдХреНрд╖реБрдУрдВ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рд╣рд╛рд╕реНрдХреЗрд▓ рдХреЛ рдЕрдирд┐рд╡рд╛рд░реНрдп рдирд╣реАрдВ рдмрдирд╛рддреА рд╣реИред
рддреЛ, рд╡рд╛рдкрд╕ рд╣рдорд╛рд░реЗ
main
ред рдпрд╣ рдХреЛрдИ рддрд░реНрдХ рдирд╣реАрдВ рд▓реЗрддрд╛ рд╣реИ рдФрд░ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдПрдХ I / O рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣рдорд╛рд░реЗ рдкреВрд░реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛ рдирд┐рд╖реНрдкрд╛рджрди рд╣реИред рдпрд╣ рдордЬрд╛рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдкреНрд░рд╛рдкреНрдд рдкреВрд░реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ
рдПрдХ рднреА рд╢реБрджреНрдз рдХрд╛рд░реНрдп рдирд╣реАрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ рд╕рднреА рдЙрдкрд▓рдмреНрдз рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рд╕реЗ рд╣рдбрд╝рддрд╛рд▓реА рд░реВрдк рд╕реЗ рдЕрд▓рдЧ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рд╕рд┐рд░реНрдл рд╕рдорд╕реНрдпрд╛ рд╣реИ рдЬреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИред рдХреНрд░рд┐рдпрд╛рдУрдВ рдХрд╛ рдЕрдиреБрдХреНрд░рдо рдХрд╛рд░реНрдпреЛрдВ
>>=
рдФрд░
>>
рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рджреЛ рддрд░реНрдХ рд▓реЗрддреЗ рд╣реИрдВред рдкрд╣рд▓реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдмрд╛рдИрдВ рдУрд░ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рджрд╛рдпреАрдВ рдУрд░ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХреЗ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рджреВрд╕рд░реЗ рдореЗрдВ, рдмрд╛рдИрдВ рдУрд░ рдХреА рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЛ рдЪреБрдкрдЪрд╛рдк рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рджрд╛рдИрдВ рдУрд░ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреА рдЬрд╛рддреА рд╣реИред
рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ,
getArgs
рдлрд╝рдВрдХреНрд╢рди рджреНрд╡рд╛рд░рд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреНрд░рд┐рдпрд╛ рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ
getArgs
рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреА рдПрдХ рд╕реВрдЪреА рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрддреА рд╣реИ, рдЬреЛ
launch
рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкрд╛рд╕ рдХреА рдЬрд╛рддреА рд╣реИред рд▓реЙрдиреНрдЪ рдлрд╝рдВрдХреНрд╢рди рдиреАрдЪреЗ рд╡рд░реНрдгрд┐рдд рд╣реИред рдпрд╣ рдПрдХ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рддрд╛рд░ рдХреА рдПрдХ рд╕реВрдЪреА рд▓реЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ I / O рдХрд╛рд░реНрд░рд╡рд╛рдИ рднреА рджреЗрддрд╛ рд╣реИ рдЬреЛ рдХрд┐рд╕реА рднреА рдореВрд▓реНрдп рдХреЛ рд╡рд╛рдкрд╕ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╣реА рдХрд╣рд╛ рдерд╛, рд╣рд╛рд╕реНрдХреЗрд▓ рдореЗрдВ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕рдореАрдХрд░рдгреЛрдВ рдХреА рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ рдиреЗрддреНрд░рд╣реАрди рд░реВрдк рд╕реЗ рд▓реЙрдиреНрдЪ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдЧреАрддрд╛рддреНрдордХ рд╡рд┐рд╖рдпрд╛рдВрддрд░ред рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рд╢реЗрд╖ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдХреМрди рд╕рд╛ рд╕рдореАрдХрд░рдг рдЪреБрдирд╛ рдЬрд╛рдПрдЧрд╛ рдпрд╣ рдкреИрдЯрд░реНрди рдорд┐рд▓рд╛рди рдкреНрд░рдХреНрд░рд┐рдпрд╛, рдЕрд░реНрдерд╛рдд рдкреИрдЯрд░реНрди рдорд┐рд▓рд╛рди рд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╣реЛрддрд╛ рд╣реИред рдлрд╝рдВрдХреНрд╢рди рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛ рдмрд╛рдИрдВ рдУрд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╕рдореАрдХрд░рдг рдХреЗ рднрд╛рдЧ рджреНрд╡рд╛рд░рд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдкреИрдЯрд░реНрди рдорд┐рд▓рд╛рди рдкреНрд░рдХреНрд░рд┐рдпрд╛, рдХреЛрдб рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рд╡рд╛рд▓реЗ рдХреНрд░рдо рдореЗрдВ рдирд┐рдпрдВрддреНрд░рдгреЛрдВ рдХрд╛ рдЪрдпрди рдХрд░рддреА рд╣реИред "рдХреБрдЫ рднреА" рдХреЗ рд▓рд┐рдП рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рдкреНрд░рддреАрдХ
_
ред рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдореЗрдВ, рдЖрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдФрд░ рдЪрд╛рд╣рд┐рдП!) рд╡рд┐рднрд┐рдиреНрди рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХрд╛ рд╡рд┐рд░реЛрдз рдХрд░реЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
foo ["a",""] = 0
рд▓рд┐рдЦрдиреЗ рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдпрджрд┐ рджреЛ рдкрдВрдХреНрддрд┐рдпреЛрдВ "a" рдФрд░ "b" рдХреА рд╕реВрдЪреА рдлрд╝рдВрдХреНрд╢рди рдлреВ рдХреЗ рд▓рд┐рдП рдЖрддреА рд╣реИ, рддреЛ рдпрд╣ 0 рд▓реМрдЯреЗрдЧрд╛ред
рдЗрд╕рд▓рд┐рдП, рдпрджрд┐
launch
рдлрд╝рдВрдХреНрд╢рди рдПрдХрд▓ рдорд╛рди
x
рд╕рд╛рде рдПрдХ рд╕реВрдЪреА рдХреЗ рд╕рд╛рде рдЖрддрд╛ рд╣реИ, рддреЛ рд╣рдо рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХрд╛ рдкрде рд╣реИ рдФрд░ рдкреНрд░рдмрдВрдзрдХ рдореЙрдбреНрдпреВрд▓ рд╕реЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдЙрд╕
рдмрд░рд╛рдмрд░ рдПрдХ рддрд░реНрдХ рдХреЗ рд╕рд╛рде
processDirectory
рд╣реИ (рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдлрд╝рдВрдХреНрд╢рди рдХрд┐рд╕ рдореЙрдбреНрдпреВрд▓ рд╕реЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ? рдпрджрд┐ рдпрд╣ рджреЛрд╣рд░реА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ, (рджреЛ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдПрдХ рд╣реА рдирд╛рдо рдХреЗ рд╕рд╛рде рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ)ред рдФрд░ рдЕрдЧрд░ рдХреБрдЫ рдФрд░ (рдЯреЗрдореНрдкрд▓реЗрдЯ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ) - рддреЛ GUI рдЪрд▓рд╛рдПрдВред
рд╡рд╣ рдкреВрд░рд╛ рдореЗрди рдореЙрдбреНрдпреВрд▓ рд╣реИ! рд╣рдордиреЗ рдЕрдкрдиреЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреА рд╕реБрд╡рд┐рдзрд╛ рдирдВрдмрд░ 1 рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рд╣реИ, рд╣рдордиреЗ рдЗрд╕реЗ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рд╣реИ!
рд╣рд╛рдВ, рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рд╕рдм рдмрд╣реБрдд рд╣рдж рддрдХ рдмрд┐рдирд╛ рдЗрдЬрд╛рдЬрдд рдХреЗ рджрд┐рдЦрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдм рд╕реНрд░реЛрдд рдореЙрдбреНрдпреВрд▓ рдореЗрди рдкрд░ рдлрд┐рд░ рд╕реЗ рджреЗрдЦреЗрдВред рд╕рднреА рдЧреАрддрд╛рддреНрдордХ рдЦреБрджрд╛рдИ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрдврд╝реЗрдВ рдФрд░ рдЦреБрдж рдХреЛ рдмрддрд╛рдПрдВ, рдХреНрдпрд╛ рдпрд╣ рдЗрддрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ? рд╢рд╛рдпрдж рд╕рд┐рд░реНрдл рдЕрд╕рд╛рдорд╛рдиреНрдп? рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рд╕рд╛рд╣рд╕рдкреВрд░реНрд╡рдХ рдФрд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рднреА рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рд╣реИ, рдпрд╣ рдкрдврд╝рдирд╛ рдЬрд╛рд░реА рд░рдЦрдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рд╣реИред
рдбреЗрдЯрд╛ EXIF
рдЖрдЗрдП рд╣рдо рдЕрдм рдХреЗ рд▓рд┐рдП рдореБрдЦреНрдп рдХрдореНрдкреНрдпреВрдЯреЗрд╢рдирд▓ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЫреЛрдбрд╝ рджреЗрдВ рдФрд░ EXIF тАЛтАЛрд╕реЗ рдПрдХ рддрд╕реНрд╡реАрд░ рдХрд╛ рд╕рдордп рдбреЗрдЯрд╛ рдирд┐рдХрд╛рд▓рдиреЗ рдХрд╛ рдХрд╛рд░реНрдп рд▓рд┐рдЦреЗрдВред рдЗрд╕рдХреЗ рд▓рд┐рдП, рдПрдХ рдЕрд▓рдЧ рдлреЛрдЯреЛ рдореЙрдбреНрдпреВрд▓ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЕрд▓рдЧ рдХреНрдпреЛрдВ? рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдореЗрд░реЗ рднреАрддрд░ рдХреА рд╡реГрддреНрддрд┐ рджреНрд╡рд╛рд░рд╛ рдореБрдЭреЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдпрд╣ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдлреЛрдЯреЛрдЧреНрд░рд╛рдлреА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдореЙрдбреНрдпреВрд▓ рд╣реИ, рдЕрдЪрд╛рдирдХ рдореЗрд░рд╛ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рд╕рд╛рде рдмрдврд╝реЗрдЧрд╛? рдЖрдЗрдП рдЗрд╕рдХреЗ рд╕реНрд░реЛрдд рдХреЛ рджреЗрдЦреЗрдВред
- рдореЙрдбреНрдпреВрд▓ рдлреЛрдЯреЛ (
- getTime
- ) рдХрд╣рд╛рдБ
- рдЖрдпрд╛рдд рдбреЗрдЯрд╛ ред рд╕рдордп
- рдЖрдпрд╛рдд рдкреНрд░рдгрд╛рд▓реА
- рдЖрдпрд╛рдд рдЧреНрд░рд╛рдлрд┐рдХреНрд╕
- getTime :: рд╕реНрдЯреНрд░рд┐рдВрдЧ -> IO (рд╢рд╛рдпрдж рджрд┐рди )
- getTime filePath =
- рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдлрд╝рд╛рдЗрд▓рдкрд╛рда >> = (\ e -> getTag e "DateTime") >> = ( рд╡рд╛рдкрд╕реА ред рдкрд╛рд░реНрд╕рд▓реЗрдЯ)
- рдЬрд╣рд╛рдБ
- parseDateTime (Just str) = parseTime defaultTimeLocale "% Y:% m:% d% H:% M:% S" str
- parseDateTime рдХреБрдЫ рдирд╣реАрдВ = рдХреБрдЫ рднреА рдирд╣реАрдВ
* рдЗрд╕ рд╕реЛрд░реНрд╕ рдХреЛрдб рдХреЛ рд╕реЛрд░реНрд╕ рдХреЛрдб рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд░ рдХреЗ рд╕рд╛рде рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдбрд░рд╛рд╡рдирд╛? рдмрд┐рд▓рдХреБрд▓ рдирд╣реАрдВред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЗрд╕ рдмрд╛рд░ рдореЙрдбреНрдпреВрд▓ рдкрд░рд┐рднрд╛рд╖рд╛ рдореЗрдВ, рд╣рдордиреЗ рдмреНрд░реИрдХреЗрдЯреНрд╕ рдореЗрдВ рдЧреЗрдЯрдЯрд╛рдЗрдо рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдирд╛рдо рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рд╣реИред рдореЙрдбреНрдпреВрд▓ рдХреЗ рдмрд╛рд╣рд░ рд╕реЗ рд╕реБрд▓рдн рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдпрд╣рд╛рдВ рдЗрдВрдЧрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣рд╛рдВ C \ C ++ рдореЗрдВ рдлреНрд▓реИрд╢ рд╣реЗрдбрд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рдмрдЬрд╛рдп рдПрдХ рд╕рд░рд▓ рдФрд░ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рд╕рдорд╛рдзрд╛рди рд╣реИред
рдЧреЗрдЯрдЯрд╛рдЗрдо рдлрд╝рдВрдХреНрд╢рди рдкрд░ рдзреНрдпрд╛рди рджреЗрдВред рдпрд╣ рдПрдХ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдлрд╝рд╛рдЗрд▓ рдкрде рд▓реЗрддрд╛ рд╣реИ, рдФрд░ рдПрдХ рдХреНрд░рд┐рдпрд╛ рджреЗрддрд╛ рд╣реИ
рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдбреЗ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ ред рд╢рд╛рдпрдж рдпрд╣ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рдХреАрд╡рд░реНрдб рдирд╣реАрдВ рд╣реИ, рдпрд╣ рдПрдХ рдмрд╣реБрдд рд╣реА рдирд┐рд╢реНрдЪрд┐рдд рдкреНрд░рдХрд╛рд░ рд╣реИ рдЬреЛ рджреЛ рдорд╛рди рд▓реЗ рд╕рдХрддрд╛ рд╣реИ: рдЬрд╕реНрдЯ рд╕рдордерд┐рдВрдЧ рдСрд░ рдирдерд┐рдВрдЧред рдЗрд╕ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрджрд┐ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдлрд╝рдВрдХреНрд╢рди рдорд╛рди рд╢реНрд░реЗрдгреА рд╕реЗ рдХреЛрдИ рд╡рд┐рд╢реЗрд╖ рдорд╛рди рдирд╣реАрдВ рд▓реМрдЯрд╛ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХрд┐рд╕реА рд╕реВрдЪреА рдореЗрдВ рдПрдХ рдЖрдЗрдЯрдо рдХреА рдЦреЛрдЬ рдЬреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╢рд░реНрддреЛрдВ рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИред рдРрд╕рд╛ рддрддреНрд╡ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рдпрд╣рд╛рдБ рд╢рд╛рдпрдж рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рд╣рдореЗрдВ рдмрддрд╛рддреА рд╣реИ рдХрд┐ рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рдордп рдбреЗрдЯрд╛ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд╣рд╛рд╕реНрдХреЗрд▓ рдореЗрдВ рд╕рдордп рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рджрд┐рди рдХреЗрд╡рд▓ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдбреЗрдЯрд╛ рд╣реИред рдЧреЗрдЯрдЯрд╛рдЗрдо рдлрд╝рдВрдХреНрд╢рди рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ (рдЬреЛ рд╕рдореАрдХрд░рдг рдХреЗ рджрд╛рдИрдВ рдУрд░ рд╣реИ) рддреБрд░рдВрдд рджреЛ рдФрд░ рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рддреА рд╣реИ рдЬреЛ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдирдИ рд╣реИрдВред рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ рдмрд╛рддреЗрдВ рдкрд╣рд▓реЗред рдпрд╣ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЧреЗрдЯрдЯрд╛рдЗрдо рдореЗрдВ рддреАрди рдХреНрд░рд┐рдпрд╛рдПрдВ рд╣реЛрддреА рд╣реИрдВ:
- рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, Graphics.Exif рдореЙрдбреНрдпреВрд▓ рд╕реЗ fromFile рдлрд╝рдВрдХреНрд╢рди, Exif рдкреНрд░рдХрд╛рд░ рдХрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдкрдврд╝рддрд╛ рд╣реИ, рдЗрд╕реА рдХреНрд░рд┐рдпрд╛ рдХреЛ рдХрд░рдиреЗ рд╕реЗ рд╣рдореЗрдВ рдпрд╣ рдСрдмреНрдЬреЗрдХреНрдЯ рдорд┐рд▓рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдЕрдЧрд▓реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдореЗрдВ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ;
- рдЕрдЧрд▓рд╛ рдлрд╝рдВрдХреНрд╢рди рдПрдХ рд▓реИрдореНрдмреНрдбрд╛ рдПрдХреНрд╕рдкреНрд░реЗрд╢рди
\ e -> getTag e "DateTime"
, рдпрд╣рд╛рдБ рдмреИрдХрд╕реНрд▓реИрд╢ рд╕реВрдХреНрд╖реНрдо рд░реВрдк рд╕реЗ рдЧреНрд░реАрдХ рд╕рд┐рдВрдмрд▓ "рд▓реИрдореНрдмреНрдбрд╛" рд╕реЗ рдорд┐рд▓рддрд╛ рдЬреБрд▓рддрд╛ рд╣реИ, рдпрд╣ рдПрдХ рддрд░реНрдХ рдХрд╛ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ, рдЬреЛ рдкрд╣рд▓реЗ рдкреНрд░рд╛рдкреНрдд рдПрдХреНрд╕рдлрд╝ рдХреЛ рд▓реЗрддрд╛ рд╣реИ, рдЬреЛ IO (рд╢рд╛рдпрдж рд╕реНрдЯреНрд░рд┐рдВрдЧ) рдПрдХреНрд╢рди рджреЗрддрд╛ рд╣реИред ExT рдФрд░ рдЯреИрдЧ рдирд╛рдо рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреЗ рд╣реБрдП getTag рдлрд╝рдВрдХреНрд╢рди; - рдкрд┐рдЫрд▓реА рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдЕрдВрддрд┐рдо рдирд┐рд░реНрдорд╛рдг рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╣рдо рдЗрд╕реЗ рдФрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд░реНрдгрд┐рдд рдХрд░рддреЗ рд╣реИрдВред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдбрд░рд╛рд╡рдирд╛ рдФрд░ рд╡рд┐рд╡рд╛рджрд╛рд╕реНрдкрдж рд╢рдмреНрдж рд╡рд╛рдкрд╕реАред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╣рд╛рд╕реНрдХреЗрд▓ рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдиреЗ рд╕реЗ рдХреБрдЫ рднреА рд╡рд╛рдкрд╕ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдкрд░реЛрдХреНрд╖ рд░реВрдк рд╕реЗ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИред рд╡рд╛рдкрд╕реА рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬреЛ рдЗрд╕реЗ рдореЗрдВ рдкрд╛рд░рд┐рдд рдореВрд▓реНрдп рдХреЛ
рдХрд╛рд░реНрд░рд╡рд╛рдИ рдореЗрдВ рдмрджрд▓ рджреЗрддрд╛
рд╣реИ ред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдЬрд┐рд╕рдХрд╛ рдирд┐рд╖реНрдкрд╛рджрди рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХрд╛ рдирд┐рд╖реНрдкрд╛рджрди рд╣реИ, рд╡рд╣ "рд╢реБрджреНрдз" рдорд╛рди рд╡рд╛рдкрд╕ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ "рд╕рд┐рд░реНрдл рд╕реНрдЯреНрд░рд┐рдВрдЧ" рд╡рд╛рдкрд╕ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗрд╡рд▓ рдХреБрдЫ рдирд┐рд╢реНрдЪрд┐рдд рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдХрд░рдиреЗ рд╕реЗ рд╣реА рд╕рдВрднрд╡ рд╣реИ, рдЕрд░реНрдерд╛рдд, рдЗрд╕ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рд╕реНрд╡рдпрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛
рднреА рдПрдХ рдХрд╛рд░реНрд░рд╡рд╛рдИ рд╣реИ , рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдореВрд▓реНрдп рдХреЛ рдПрдХ рд╕рдирдХ рдореЗрдВ рд▓рдкреЗрдЯрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рддреНред "рдЗрд╕реЗ рд╡рд╛рдкрд╕ рдХрд░реЗрдВ" (рд╡рд╛рдкрд╕реА) рдЬрд╣рд╛рдВ рд╕реЗ рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдпрд╣ рдореЛрдирд╛рдб рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд╣рдореЗрдВ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдореЛрдирд╛рдб рдХреЛ рд▓реМрдЯрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд░рд┐рдЯрд░реНрди рд╡реИрд▓реНрдпреВ рдХреЗ рд▓рд┐рдП: рдорд╛рдирджрд┐рдХ рдлрд╝рдВрдХреНрд╢рди рдЗрд╕рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЕрдВрддрд┐рдо рдХреНрд░рд┐рдпрд╛ рджреЗрддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рдд рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдмрд╕ рд╡рд╛рдкрд╕ рд▓реМрдЯреЗрдВред
рджреВрд╕рд░реЗ, рдбреЙрдЯ рдкреНрд░рддреАрдХ рдХрд╛рд░реНрдпреЛрдВ рдХреА рдПрдХ рд░рдЪрдирд╛ рд╣реИред рдЖрдЬреНрдЮрд╛ рджреЗрдирд╛
fy = z; gx = y;
fy = z; gx = y;
рддрдм
(f . g) x == f( gx ) == z
рджреВрд╕рд░реА рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдореЗрдВ
рд╢рд╛рдпрдж рддрд╛рд░реАрдЦ рдХреЗ рд╕рд╛рде рдПрдХ
рд╕реНрдЯреНрд░рд┐рдВрдЧ рдорд┐рд▓рддреА рд╣реИ, рдФрд░ рдлрд╝рдВрдХреНрд╢рди рдЦреБрдж рд╣реА рд░рд┐рдЯрд░реНрди
рдбреЗ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ ред рдЗрд╕рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдпрд╣ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкрд╣рд▓реЗ рдкрд╛рд░реНрд╕рд┐рдо рд╣реЛ рд╕рдХрддреА рд╣реИ, рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдХреЛрдИ рддрд╛рд░реАрдЦ рд╣реЛ рд╕рдХрддреА рд╣реИ, рд╣рдо рдЗрд╕реЗ рд╡рд╛рдкрд╕ рдХрд░рддреЗ рд╣реИрдВред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЕрдВрддрд┐рдо рдХреНрд░рд┐рдпрд╛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд▓рд┐рдЦреА рдЬрд╛ рд╕рдХрддреА рд╣реИ:
\ str -> return (parseDateTime str)
рдФрд░ рдЕрдВрдд рдореЗрдВ, рдЬрд╣рд╛рдВ рдмреНрд▓реЙрдХ, рдЬреЛ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рд╣рдордиреЗ рдЧреЗрдЯрдЯрд╛рдЗрдо рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдореЗрдВ рдХрд┐рд╕ parseDateTime рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдерд╛ред рдЬрд╣рд╛рдБ рдмреНрд▓реЙрдХ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдХрд╣рддрд╛ рд╣реИ, рд╕рдВрджрд░реНрдн рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред рдЙрдирдХрд╛ рджрд╛рдпрд░рд╛ рдЙрд╕ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд░рд┐рднрд╛рд╖рд╛ рд╕реЗ рд╕реАрдорд┐рдд рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдпрд╣ рдмреНрд▓реЙрдХ рд╣реЛрддрд╛ рд╣реИред рдЗрди рд╕рдВрджрд░реНрдн рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ, рдЖрдк рдореВрд▓ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЗрдирдкреБрдЯ рддрд░реНрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдФрд░ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕рдВрджрд░реНрдн рдХрд╛ рдРрд╕рд╛ рдХрд╛рд░реНрдп рдорд╛рдиреЛрдВ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░реНрдп рд╣реИред рд╣рдордиреЗ рдЗрд╕реЗ рдПрдХ рдЕрд▓рдЧ рдмреНрд▓реЙрдХ рдореЗрдВ рд░рдЦрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕реЗ рджреЛ рд╕рдореАрдХрд░рдгреЛрдВ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП (рдЕрдиреНрдпрдерд╛ рдпрд╣ рд╕реАрдзреЗ рдЧреЗрдЯрдЯрд╛рдЗрдо рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдореЗрдВ рдЗрд╕рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛) рджреЛ рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХреЗ рд▓рд┐рдП - рдЬрд╕реНрдЯ рдПрдВрдб рдирдерд┐рдВрдЧ рдХреЗ рд╕рд╛рдеред рдкрд╣рд▓реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рдореВрд▓реНрдп рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рджреВрд╕рд░реЗ рдореЗрдВ, рд╣рдо рдлрд┐рд░ рд╕реЗ рдХреБрдЫ рднреА рдирд╣реАрдВ рд▓реМрдЯрд╛рддреЗ рд╣реИрдВред рд╕рд╣рдордд, рдХрд╛рдлреА рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ?
рд╕рдордп рдирд┐рдХрд╛рд▓рдиреЗ рдХрд╛ рдХрд╛рд░реНрдп рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдпрд╛ рд╣реИред рд╣рдореЗрдВ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рд╣реИред
рдХреНрд░рдо рд╕рдВрдЦреНрдпрд╛ 2 - рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдЯреНрд░реИрд╡рд░реНрд╕рд▓
рдЧреАрддрд╛рддреНрдордХ рд╡рд┐рд╖рдпрд╛рдВрддрд░ред рд╣рд╛рд╕реНрдХреЗрд▓ рд╣рдореЗрдВ рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рд╕реЛрдЪрдиреЗ рджреЗрддрд╛ рд╣реИ, рдирд╛ рдХрд┐ рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рд╣рдореЗрдВ рдЕрдирд┐рд╡рд╛рд░реНрдп рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЬрдм рдпрд╣ рдЖрддрд╛ рд╣реИ, рдХрд╣рддреЗ рд╣реИрдВ, рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рддреЛ рдПрдХ рд╕реА рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╣реЗрдЧрд╛: "рдореИрдВ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдПрдХ рд▓реВрдк рдореЗрдВ рдЬрд╛рдКрдВрдЧрд╛ рдФрд░ рдП рдХреА рдЬрд╛рдВрдЪ рдХрд░реВрдВрдЧрд╛, рдмреА"ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдПрдХ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рднрд╛рд╖рд╛ рдореЗрдВ рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдпрд╣ рдХрд╣реЗрдЧрд╛: "рдореИрдВ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдлрд╝рдВрдХреНрд╢рди рд▓рд╛рдЧреВ рдХрд░реВрдВрдЧрд╛ред"
рдЕрдкрдиреА рд╕реЛрдЪ рдХреЛ рдереЛрдбрд╝рд╛ рдкреБрдирд░реНрдирд┐рд░реНрдорд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдк рдЦреЛрдП рд╣реБрдП рдЪрдХреНрд░реЛрдВ рдХреЛ рдкрдЫрддрд╛рд╡рд╛ рдХрд░рдирд╛ рдмрдВрдж рдХрд░ рджреЗрддреЗ рд╣реИрдВред рдПрдХ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рднрд╛рд╖рд╛ рдореЗрдВ, рд╡реЗ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд╕рдВрдХрд▓реНрдкреЛрдВ рдФрд░ "рдирдХреНрд╢реЛрдВ" рд╕реЗ рдмрджрд▓ рдЬрд╛рддреЗ рд╣реИрдВред рд╣рдореЗрдВ рдпрд╣рд╛рдВ рдПрдХ рджреГрдврд╝ рд╕рдВрдХрд▓реНрдк рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдореИрдВ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреЗ рд╕рд╛рде рдкрд░реЗрд╢рд╛рди рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛ред рдореИрдВ рдорд╛рдирдЪрд┐рддреНрд░ рдХрд╛рд░реНрдп рдкрд░ рдзреНрдпрд╛рди рдХреЗрдиреНрджреНрд░рд┐рдд рдХрд░реВрдВрдЧрд╛ред рдЕрд░реНрде рдореЗрдВ рдирд┐рдХрдЯрддрдо рд░реВрд╕реА рд╢рдмреНрдж "рдореИрдкрд┐рдВрдЧ" рд╣реИ, рдФрд░ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдРрд╕рд╛ рд╣реИред рдорд╛рдирдЪрд┐рддреНрд░ рдлрд╝рдВрдХреНрд╢рди рдПрдХ рдбреЗрдЯрд╛ рдХреЛ рджреВрд╕рд░реЗ рдкрд░ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдЗрдирдкреБрдЯ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреА рд╕реВрдЪреА рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗрддрд╛ рд╣реИ
a , рдкреНрд░рдХрд╛рд░ рдХрд╛
рдПрдХ рдлрд╝рдВрдХреНрд╢рди
- a -> b (рдФрд░ рдХреИрд╕реЗ, рдпрд╣ рдПрдХ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рднрд╛рд╖рд╛ рд╣реИ, рдпрд╣рд╛рдВ рдЖрдк рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ!) рдФрд░ рдЕрдВрдд рдореЗрдВ рд╣рдореЗрдВ рдЯрд╛рдЗрдк b рдХреА рдПрдХ рд╕реВрдЪреА рдорд┐рд▓рддреА рд╣реИред рдпрд╣рд╛рдБ рдорд╛рдирдЪрд┐рддреНрд░ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдкреНрд░рдХрд╛рд░ рд╣реИ:
map :: (a -> b) -> [a] -> [b]
рдкрд╣рд▓реЗ рддрд░реНрдХ рдореЗрдВ рдХреЛрд╖реНрдардХ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ, рд╡реЗ рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рджреВрд╕рд░рд╛ рддрд░реНрдХ рд╕реНрд╡рдпрдВ рдХрд╛рд░реНрдп рд╣реИред рд╕рд╛рдорд╛рдиреНрдпрддрдпрд╛, рд╣рд╛рд╕реНрдХреЗрд▓ рдореЗрдВ, рд╕рднреА рдХрд╛рд░реНрдп рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рд╣реА рддрд░реНрдХ рдХреЗ рдХрд╛рд░реНрдп рд╣реЛрддреЗ рд╣реИрдВ, рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдорд╛рдиреЛрдВ рдХреЛ рд╡рд╛рдкрд╕ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡реЗ рдХрд╛рд░реНрдп рд╣реЛрддреЗ рд╣реИрдВред рдЕрддрд┐рд░рд┐рдХреНрдд рдХрд╛рд░реНрдп рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
add :: Int -> Int -> Int
рдЗрд╕рдХрд╛ рдкреНрд░рдХрд╛рд░ рдЗрд╕ рддрд░рд╣ рд╕рд╣реА рд▓рд┐рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП:
add :: (Int -> (Int -> Int))
рдлрд░реНрдХ рдорд╣рд╕реВрд╕ рдХрд░рддреЗ рд╣реИрдВ? рддреЛ,
add 5 2
рдорд╛рди рд▓реМрдЯрд╛рдПрдЧрд╛ 7. рд▓реЗрдХрд┐рди
add 5
, рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд▓реМрдЯрд╛рдПрдЧрд╛ рдЬреЛ рдкреНрд░рдХрд╛рд░ Int рдХрд╛ рдорд╛рди рд▓реЗрддрд╛ рд╣реИ рдФрд░ рдкреНрд░рдХрд╛рд░ Int рдХрд╛ рдорд╛рди рд▓реМрдЯрд╛рддрд╛ рд╣реИ! рдпрд╣ рдРрд╕реЗ рдЪрдорддреНрдХрд╛рд░реЛрдВ рдкрд░ рд╣реИ рдХрд┐ рдорд╛рдирдЪрд┐рддреНрд░ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╕рд┐рджреНрдзрд╛рдВрдд рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣рдо рдореВрд▓ рд╕реВрдЪреА рдХреЗ рд╕рднреА рддрддреНрд╡реЛрдВ рдореЗрдВ рдПрдХ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ:
map (+ 1) [1,2,3]
рд▓реЗрдХрд┐рди рдЖрдк рдХрд┐рд╕реА рднреА рд╣рд╛рд╕реНрдХреЗрд▓ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдореЗрдВ рдЗрд╕реА рддрд░рд╣ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдЗрдП рдЕрдкрдиреА рднреЗрдбрд╝реЛрдВ рдХреЗ рдкрд╛рд╕ рд╡рд╛рдкрд╕ рдЬрд╛рдПрдВред рдЕрдм рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдХреИрдЯрд▓реЙрдЧ рдореЗрдВ рддрддреНрд╡реЛрдВ рдХреА рдкреВрд░реА рд╕реВрдЪреА рдХреЗ рд╕рд╛рде рдЖрдкрдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдорд╛рди рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдФрд░ рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ (рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рдереЛрдбрд╝рд╛ рдЧрд▓рдд рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ)ред рдЗрд╕реЗ рдорд╣рд╕реВрд╕ рдХрд░реЛ? рдпрд╣ рд╡рд╣ рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдБ рдорд╛рдирдЪрд┐рддреНрд░ рдХреЗ рдЖрд╡реЗрджрди рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ, рд╣рдо рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВрдЧреЗ рдХрд┐ рдХреИрдЯрд▓реЙрдЧ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
- рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ рдЗрд╕ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдпрд╛ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЬрд╛рдирдирд╛ рд╣реЛрдЧрд╛;
- рджреВрд╕рд░реЗ, рдпрджрд┐ рдпрд╣ рдПрдХ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╣реИ, рддреЛ рдЕрдВрджрд░ рдЬрд╛рдПрдВ, рдЕрд░реНрдерд╛рдд рдбрд╛рдпрд░реЗрдХреНрдЯреНрд░реА рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдлрд┐рд░ рд╕реЗ рдХреЙрд▓ рдХрд░реЗрдВ;
- рдЕрдВрдд рдореЗрдВ, рддреАрд╕рд░рд╛, рдпрджрд┐ рдпрд╣ рдПрдХ рдлрд╝рд╛рдЗрд▓ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдЗрд╕рдХреЗ EXIF тАЛтАЛрдбреЗрдЯрд╛ рд╕реЗ рд╕рдордп рдирд┐рдХрд╛рд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рдпрджрд┐ рдпрд╣ рд╣реИ, рддреЛ рдЗрд╕реЗ рдЙрдкрдпреБрдХреНрдд рд╕реНрдерд╛рди рдкрд░ рдХреЙрдкреА рдХрд░реЗрдВред
рдЕрдЧрд▓рд╛, рдореИрдВ рдЬрд╛рдирдмреВрдЭрдХрд░ рдореВрд▓ рдХреЛрдб рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЛ рд╣рдЯрд╛ рджреВрдВрдЧрд╛ (рдпрд╛ рдЗрд╕реЗ "рдЫрджреНрдо рдХреЛрдб" рдкреНрд▓рдЧ рд╕реЗ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реВрдВ), рдХреЗрд╡рд▓ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЫреЛрдбрд╝рдХрд░ред рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рд╣рдореЗрдВ рдХрд┐рд╕реА рддрд░рд╣ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдорд┐рд▓реА рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдПрдХ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╣реИ, рдЬрдмрдХрд┐ рд╣рдо рдЗрд╕реЗ рдЫреЛрдбрд╝ рджреЗрддреЗ рд╣реИрдВред рдлрд┐рд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХрд╛рд░реНрдп рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
- - рддрддреНрд╡ рдХрд╛ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг: рдпрджрд┐ рдХреИрдЯрд▓реЙрдЧ - рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рджрд░реНрдЬ рдХрд░реЗрдВ, рдЕрдиреНрдпрдерд╛ рд╣рдо рдлреЛрдЯреЛ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВ
- processSingle :: ( рд╕реНрдЯреНрд░рд┐рдВрдЧ , рдмреВрд▓) -> IO ()
- processSingle (рдкрде, рд╕рд╣реА) = processDirectory рдкрде
- processSingle (рдкрде, рдЧрд▓рдд) = рдХрд░рддреЗ рд╣реИрдВ
- рдЪрд┐рддреНрд░ рдбрд╛рдпрд░ <- getPicturesDir
- рд╢рд╛рдпрджDate <- getTime рдкрд╛рде
- copyPhoto рдЪрд┐рддреНрд░
- рдЬрд╣рд╛рдБ
- - рд╕реБрд░рдХреНрд╖рд┐рдд рдирдХрд▓
- рдХреЙрдкреА рдлреЛрдЯреЛ рдХреБрдЫ рднреА рдирд╣реАрдВ = рд╡рд╛рдкрд╕реА ()
- copyPhoto рдЪрд┐рддреНрд░ (рдмрд╕ рддрд┐рдерд┐) = рдХрд░рддреЗ рд╣реИрдВ
- let newPath = Pictures ++ "/" ++ (formatTime defaultTimeLocale "% Y /% B /% d" рджрд┐рдирд╛рдВрдХ)
- copyFile рдкрде newPath
* рдЗрд╕ рд╕реЛрд░реНрд╕ рдХреЛрдб рдХреЛ рд╕реЛрд░реНрд╕ рдХреЛрдб рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд░ рдХреЗ рд╕рд╛рде рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЗрд╕рд▓рд┐рдП, рд╣рдореЗрдВ рдлрдВрдХреНрд╢рди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдорд┐рд▓ рдЧрдИред рдпрд╣ рдПрдХ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рджреЛ рддрддреНрд╡реЛрдВ (рдпрд╛рдиреА, рдореВрд▓реНрдпреЛрдВ рдХреА рдПрдХ рдЬреЛрдбрд╝реА) рдХрд╛ рдПрдХ рдЯрдкрд▓ рд▓реЗрддрд╛ рд╣реИ: рдлрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рддрддреНрд╡ рдХрд╛ рдорд╛рд░реНрдЧ рдФрд░ рд╕рдВрдХреЗрдд рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╣реИред рдкреИрдЯрд░реНрди рдХреЗ рдорд┐рд▓рд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рд╣рдордиреЗ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рджреЛ рд╕рдореАрдХрд░рдгреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рд╣реИ: рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓рд╛ (рдкреБрдирд░рд╛рд╡рд░реНрддрди рдкрд░ рдЬрд╛рдПрдВ - рдкреНрд░рдХреНрд░рд┐рдпрд╛рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдлрд╝рдВрдХреНрд╢рди рдкрд░ рдмрд╛рдж рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХреА рдЬрд╛рдПрдЧреА), рдлрд╝рд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП рджреВрд╕рд░рд╛ред рдпрд╣рд╛рдВ рд╣рдореЗрдВ рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреА рд╕реВрдЪрдирд╛ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдкреЗрд╢ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЧреАрддрд╛рддреНрдордХ рд╡рд┐рд╖рдпрд╛рдВрддрд░ред рдЙрд╕ рдХреНрд╖рдг рддрдХ, рд╣рдордиреЗ рд╡рд┐рд╢реЗрд╖ рдЖрдЗрдХрди рджреНрд╡рд╛рд░рд╛ рдЕрд▓рдЧ рдХрд┐рдП рдЧрдП "рдПрдХ рдХреЗ рдмрд╛рдж рдПрдХ," рдХреНрд░рд┐рдпрд╛рдУрдВ рдХрд╛ рдХреНрд░рдо рджрд░реНрдЬ рдХрд┐рдпрд╛ред рдпрд╣ рд╣рдореЗрд╢рд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЖрдкрдХреЛ рдХрд╛рд░реНрд░рд╡рд╛рдИ рд╕реЗ рдирд┐рдХрд╛рд▓реЗ рдЧрдП рдореВрд▓реНрдп рдХреЗ рд▓рд┐рдП рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рд╕рд╛рде "рдлреНрд▓рд╛рдИ рдкрд░" рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╛, рдЕрдзрд┐рдХ рдмрд╛рд░ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ, рджреЛ рдХреНрд░рд┐рдпрд╛ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдФрд░ рдЙрдирдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЛ рддреАрд╕рд░реЗ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рд╣реИред рдпрд╣рд╛рдБ рдмрдЪрд╛рд╡ рдХреЗ рд▓рд┐рдП рджреЛ-рд╕рдВрдХреЗрддрди рдЖрддрд╛ рд╣реИ, рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╢реБрд░реБрдЖрддреА рд▓реЛрдЧреЛрдВ рдХреА рдЖрдБрдЦреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдЕрдиреБрдХреВрд▓ рд╣реИред рдпрд╣рд╛рдБ рджреЛ рд╕рдорд╛рди рдХреЛрдб рд╣реИрдВ:
- рдлреЛрдмреНрдмрд░ = рдПрдХреНрд╢рди рез >> = рдПрдХреНрд╢рди реи >> = рдПрдХреНрд╢рди рей
- рдлреЛрдмрд╛рд░ '= рдХрд░рддреЗ рд╣реИрдВ
- рдкрд░рд┐рдгрд╛рдо 1 <- рдХрд╛рд░реНрд░рд╡рд╛рдИ 1
- рдкрд░рд┐рдгрд╛рдо 2 <- рдХреНрд░рд┐рдпрд╛ 2 рдкрд░рд┐рдгрд╛рдо 1
- рдХреНрд░рд┐рдпрд╛ рей рдкрд░рд┐рдгрд╛рдо реи
* рдЗрд╕ рд╕реЛрд░реНрд╕ рдХреЛрдб рдХреЛ рд╕реЛрд░реНрд╕ рдХреЛрдб рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд░ рдХреЗ рд╕рд╛рде рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд╕рд┐рд░реНрдл рджреЛ рдкрд░рд┐рдгрд╛рдо рддреАрд╕рд░реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдлрд╝рдВрдХреНрд╢рди рддреБрдЪреНрдЫ рд╣реИ: рдлрд┐рд░ рд╕реЗ рдЯреЗрдореНрдкрд▓реЗрдЯ рд╕реЗ рдореЗрд▓ рдЦрд╛рддреЗ рд╣реБрдП, рдпрджрд┐ рдЖрдкрдХреЛ рддрд╛рд░реАрдЦ рдорд┐рд▓рддреА рд╣реИ, рддреЛ рдлрд╝рд╛рдЗрд▓ рдХреЛ
path
рд╕реЗ
newPath
рдкрд░
newPath
ред рд╣рдо рджреЛ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рдиреЛрдЯ рдХрд░рддреЗ рд╣реИрдВ:
- рдкрде "рд╢реАрд░реНрд╖" рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдПрдХ рддрд░реНрдХ рд╣реИ рдлрд╝рдВрдХреНрд╢рди, рдЕрд░реНрдерд╛рддреНред copyPhoto рдПрдХ рд╕рдВрджрд░реНрдн-рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдлрд╝рдВрдХреНрд╢рди рд╣реИ;
- рдЪрд▓реЛ рднрд╛рд╖рд╛ рдХрд╛ рдПрдХ рдХреАрд╡рд░реНрдб рд╣реИ, рдпрд╣ рдЖрдкрдХреЛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдореВрд▓реНрдп рдХреЛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдирд╛рдо рд╕реЗ рдмрд╛рдВрдзрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ (рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрд╣ рдПрдХ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдирд╣реАрдВ рд╣реИ , рдЗрд╕рдХрд╛ рдорд╛рди рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдирд╛рдо рдПрдХ рдЕрд▓рдЧ рдореВрд▓реНрдп рдХреЗ рд▓рд┐рдП рдмрд╛рдзреНрдп рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдкрдиреЗ рдЗрд╕реЗ рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рдкрд╣рд▓реЗ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рд╣реИ , рддреЛ рдпрд╣ рд╡рд╣рд╛рдВ рдирд╣реАрдВ рдмрджрд▓реЗрдЧрд╛) - рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рдмрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
formatTime
рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬреЛ рдПрдХ рд╕реНрдерд╛рди, рдкреИрдЯрд░реНрди рдФрд░ рджрд┐рдирд╛рдВрдХ рд▓реЗрддрд╛ рд╣реИ, рдФрд░ рдЙрд╕ рдкреИрдЯрд░реНрди рдХреЗ рд▓рд┐рдП рд╕реНрд╡рд░реВрдкрд┐рдд рджрд┐рдирд╛рдВрдХ рдХреЗ рд╕рд╛рде рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рджреЗрддрд╛ рд╣реИред
++
рдПрдХ рд╕реВрдЪреА рд╕рдореНрдореЗрд▓рди рд╕рдорд╛рд░реЛрд╣ рд╣реИред
рдХреЗрд╡рд▓, рд╣рдордиреЗ рдХреЗрд╡рд▓ рдлрд╝рдВрдХреНрд╢рди # 3 рдХрд╛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рд╣реИред рдХреНрдпрд╛ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рд░рд▓ рд╣реИ? рддреЛ рд╣рдорд╛рд░рд╛ рдлрдВрдХреНрд╢рди рдирдВрдмрд░ 2 рдХреИрд╕рд╛ рджрд┐рдЦреЗрдЧрд╛ред рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:
- рдкреНрд░рдХреНрд░рд┐рдпрд╛рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА :: рд╕реНрдЯреНрд░рд┐рдВрдЧ -> рдЖрдИрдУ ()
- processDirectory dir =
- getDirectoryContents dir >> = checkItems >> = (mapM_ processSingle)
- рдЬрд╣рд╛рдБ
- - рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕рд╛рдордЧреНрд░реА рдХреА рджреА рдЧрдИ рд╕реВрдЪреА рдХреЗ рд▓рд┐рдП, рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдХреЗ рд▓рд┐рдП рдПрдХ рдорд╛рд░реНрдХрд░ "рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛" рдХреЗ рд╕рд╛рде рдЯреНрдпреВрдкрд▓ рд▓реМрдЯреЗрдВ
- checkItems xs = mapM рд╕рд┐рдВрдЧрд▓рдЪреЗрдХ xs
- рдЬрд╣рд╛рдБ
- рд╕рд┐рдВрдЧрд▓рдЪреЗрдХ рдкрд╛рде = рдХрд░реЛ
- isDirectory <- (doDirectoryExist path)
- рд╡рд╛рдкрд╕реА (рдкрде, isDirectory)
* рдЗрд╕ рд╕реЛрд░реНрд╕ рдХреЛрдб рдХреЛ рд╕реЛрд░реНрд╕ рдХреЛрдб рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд░ рдХреЗ рд╕рд╛рде рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЗрд╕ рдкрд░ рдХрд░реАрдм рд╕реЗ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рдХрд╛рд░реНрдп рд╣реИред рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ, mapM рдФрд░ mapM_ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рд╢рдмреНрджред
рдЧреАрддрд╛рддреНрдордХ рд╡рд┐рд╖рдпрд╛рдВрддрд░ред map, , . , map. :
mapM :: (a -> IO b) -> [a] -> IO [b]
mapM_ :: (a -> IO b) -> [a] -> IO ()
, map, , , . , . , .
, :
- singleCheck тАФ , , , - ( , !);
- checkItems ( ) , - ( , mapM);
- , processDirectory , processSingle ( , , , ).
! рдЕрдВрдд! . , GUI.
GUI
? , . тАФ SQL. . , ( ) ,
, ,
.
Haskell тАФ , , , ! . Haskell GTK. : Glade, Haskell .
:
- prepareGUI mainWindow startButton fileChooser =
- рдХрд░рдирд╛
- onDestroy mainWindow mainQuit
- onClicked startButton (processClick fileChooser)
- where
- processClick fileChooser = fileChooserGetFilename fileChooser >>= processDirectory
* рдЗрд╕ рд╕реЛрд░реНрд╕ рдХреЛрдб рдХреЛ рд╕реЛрд░реНрд╕ рдХреЛрдб рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд░ рдХреЗ рд╕рд╛рде рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
, .
рдирд┐рд╖реНрдХрд░реНрд╖
github ( ), , . , , , Haskell, . , , - . : , MVC - Haskell! , тАФ , , !.. , - .
githubHaskell