рд╣рд╛рд╕реНрдХреЗрд▓ рдмрдЬрд╛рдУ



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

рд╣рд╛рд╕реНрдХреЗрд▓ рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдо (GHC) рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ


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

рдореИрдиреБрдЕрд▓ рдХреЛ рдореИрдХ рдУрдПрд╕ рдПрдХреНрд╕ 10.8 рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╣реЛрдордмреНрд░реЙрд╡ рд╕реНрдерд╛рдкрд┐рдд (рдФрд░ рдПрдХреНрд╕рдХреЛрдб рдХреЗ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг) рдХреЗ рд╕рд╛рде рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рд╣рд╛рд╕реНрдХреЗрд▓ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЕрдиреНрдп рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдкрд░ рд╕рдорд╛рди рдХреИрд╕реЗ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╣рд╛рд╕реНрдХреЗрд▓ рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдо рдХрд╛ рд╡рд░реНрддрдорд╛рди рд╕рдВрд╕реНрдХрд░рдг рд╡рд░реНрддрдорд╛рди рдореЗрдВ 2012.4.0.0 рд╣реИред

$ brew install haskell-platform 

рдХреИрдмреЗрд▓ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ


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

рдХреИрдмрд▓ ~/.cabal/ рдореЗрдВ рдЕрдкрдиреЗ рдкреИрдХреЗрдЬ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ ~/.cabal/bin/ ред рдЖрдкрдХреЛ рдкрд╛рде рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдореЗрдВ рдЗрди рд░рд╛рд╕реНрддреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ред рдХреБрдЫ рдРрд╕рд╛ рд╣реА рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдм рдЖрдкрдХреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдУрдВ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ (рдореИрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдЗрд╕ рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд▓рд┐рдП ~/.profile рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ - рдЕрдиреБрд╡рд╛рджрдХ рдХреА рдЯрд┐рдкреНрдкрдгреА):

 $ echo 'export PATH=$HOME/.cabal/bin:$PATH' >> ~/.bashrc 

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

 $ cabal update 

рдлрд┐рд▓рд╣рд╛рд▓, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдкреНрд░реЛрдлрд╛рдЗрд▓рд┐рдВрдЧ рдХреЗ рдмрд┐рдирд╛ ~/.cabal/config рд╕рдХреНрд╖рдо рд╣реИред рдЖрдк рд╢рд╛рдпрдж рдЗрд╕реЗ рдмрд╛рдж рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдФрд░ рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рдЕрднреА рдЪрд╛рд▓реВ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЖрдкрдХреЛ рдлрд┐рд░ рд╕реЗ рдЬреАрд╡рд┐рдд рд░рд╣рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╢реНрд╡рд╕реНрдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЗрд╕реЗ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд▓рд╛рдЗрди рдХреЛ рдмрджрд▓реЗрдВ -- library-profiling: False library-profiling: True рд▓рд┐рдП -- library-profiling: False library-profiling: True рдлрд╛рдЗрд▓ рдореЗрдВ library-profiling: True ~/.cabal/config ред

 $ for f in ~/.cabal/config; do \ cp $f $f.old && \ sed -E 's/(-- )?(library-profiling: )False/\2True/' < $f.old > $f; \ done 

рдЖрдкрдХрд╛ рдкрд╣рд▓рд╛ рдкрд╣рд▓рд╛ рдкреИрдХреЗрдЬ рдХреИрдмрд▓ рдЗрдВрд╕реНрдЯреЙрд▓рд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:

 $ cabal install cabal-install 

Ghc-mod рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ (Emacs / Vim рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рд╕рдорд░реНрдерди)


Ghc-mod Emacs рдпрд╛ Vim рдХреЗ рд╕рд╛рде GHC рдХреЛ рдПрдХреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рдХрд╛рдо рдЖрддрд╛ рд╣реИред рдЗрд╕реА рдкреНрд░рднрд╛рд╡ рдХреЛ Sublime Text 2 рдФрд░ ghc-mod рдореЗрдВ SublimeHaskell рдХреЗ рд╕рд╛рде рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЕрднреА рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдХреЗрд╡рд▓ Emacs рдХреЗ рд╕рд╛рде рдПрдХреАрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИред рд╡рд┐рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ hdevtools , рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╣ рдмрд╣реБрдд рддреЗрдЬрд╝ рд╣реИ рдФрд░ рдПрдХрджрдо рд╕рдЯреАрдХ рд╣реИ ( рдХрдорд╕реБ рдЯрд┐рдкреНрдкрдгреА рджреЗрдЦреЗрдВ)

 $ cabal install ghc-mod 

рдореИрдВ рдЖрдкрдХреЗ рдЕрдкрдиреЗ Emacs рдХреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдХрд╡рд░ рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛ (рд▓реЗрдХрд┐рди рдЖрдк рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдореЗрд░реЗ рд╡рд░реНрддрдорд╛рди ~ / .emacs.d рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)ред

рдХреЗрдмрд▓-рджреЗрд╡ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ (рд╕реИрдВрдбрдмреЙрдХреНрд╕ рдмрдирд╛рдПрдБ)


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

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

рд╕рд╛рдорд╛рдиреНрдп рдХреЗрдмрд▓-рджреЗрд╡ рд╕реНрдерд╛рдкрдирд╛ рдХреЛ cabal install cabal-dev рддрд░рд╣ рджрд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдЕрднреА рддрдХ рдХрд┐рд╕реА рдиреЗ рдмрдЧ # 74 рдХреЛ рдмрдВрдж рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рдЖрдкрдХреЛ рдЗрд╕реЗ рд╕реНрд░реЛрдд рд╕реЗ рдПрдХрддреНрд░ рдХрд░рдирд╛ рдФрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛:

 $ git clone https://github.com/creswick/cabal-dev.git /tmp/cabal-dev-src && \    (cd /tmp/cabal-dev-src; cabal install) && \    rm -rf /tmp/cabal-dev-src 

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

рдХреЗрдмрд▓-рджреЗрд╡ рдХреЗ рд╕рд╛рде рдЙрдкрдХрд░рдг рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛


рдпрджрд┐ рдЖрдк рдХреБрдЫ рдЙрдкрдХрд░рдг рдЖрдЬрд╝рдорд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЖрдкрдХреА рд╣рд╛рд╕реНрдХреЗрд▓ рд╕реНрдерд╛рдкрдирд╛ рдХреЛ рджреВрд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдХреЛрдИ рдЗрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рдмрд╕ рдХрд╛рдмрд╛рд▓-рджреЗрд╡ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдХреИрдмрд▓-рджреЗрд╡ рд╕реИрдВрдбрдмреЙрдХреНрд╕ рдореЗрдВ ./cabal-dev , рд▓реЗрдХрд┐рди рдЖрдк рдЗрд╕реЗ рдХрд╣реАрдВ рднреА рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдореИрдВ /us/local/Cellar/darcs/2.8.2 рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ darcs 2.8.2 (рд╣рд╛рд╕реНрдХреЗрд▓ рдореЗрдВ рд▓рд┐рдЦрд╛ рдПрдХ рд╡рд┐рддрд░рд┐рдд рд╕рдВрд╕реНрдХрд░рдг рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рдгрд╛рд▓реА) рд╕реНрдерд╛рдкрд┐рдд рдХрд░реВрдВрдЧрд╛ , рдФрд░ Homebrew рдХреЛ рдореБрдЭрд╕реЗ рд╕рд╣рд╛рдиреБрднреВрддрд┐ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣реВрдВрдЧрд╛ ред рдЕрдиреНрдп рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдкрд░, рдЖрдкрдХреЛ рдЕрдкрдиреА рд╕реНрд╡рдпрдВ рдХреА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реЛрдЧреА, рд╕рд╛рде рд╣реА рд╕рд╛рде PATH рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

 $ cabal-dev install -s /usr/local/Cellar/darcs/2.8.2 darcs-2.8.2 $ brew link --overwrite darcs 

Tydyzh! рдЕрдм рдЖрдкрдХреЗ рдкреАрдПрдЯреАрдПрдЪ рдореЗрдВ рдбрд╛рд░реНрдХреНрд╕ рдирд┐рд╣рд┐рдд рд╣реИрдВ, рдФрд░ рдЖрдкрдХреЛ рдкрд░рд╕реНрдкрд░ рд╡рд┐рд░реЛрдзреА рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдЦреИрд░, рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рд╕рдВрдШрд░реНрд╖ рдЕрднреА рднреА рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдЕрдм рдРрд╕рд╛ рдЕрдХреНрд╕рд░ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдХреИрдмрд▓-рджреЗрд╡ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдкреИрдХреЗрдЬ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╡реЗ рдЪрдпрдирд┐рдд рд╕реИрдВрдбрдмреЙрдХреНрд╕ рдХреЗ рдмрд╣реБрдд рдКрдкрд░ рдЬрд╛рддреЗ рд╣реИрдВред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдЕрдЧрд░ рджреЛ рдкреИрдХреЗрдЬреЛрдВ рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдп рдирд┐рд░реНрднрд░рддрд╛ (рдмрд╣реБрдд рд╕рд╛рдорд╛рдиреНрдп) рд╣реИ, рддреЛ рд╡реЗ рд▓рд╛рдЗрд╕реЗрдВрд╕ рд╕рдордЭреМрддреЗ рдХреА рдлрд╛рдЗрд▓реЛрдВ рдФрд░ рдирд┐рд░реНрднрд░рддрд╛ рдкреНрд░рд▓реЗрдЦрди рдЬреИрд╕реА рдЪреАрдЬреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ-рджреВрд╕рд░реЗ рдХреЗ рд╕рд╣рд╛рдиреБрднреВрддрд┐ рдкрд░ рдПрдХ рдЬрд┐рдЧ рдереВрдХ рджреЗрдВрдЧреЗред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, --overwrite рдХрд╛ рдЙрдкрдпреЛрдЧ --overwrite рд▓рдЧрднрдЧ рджрд░реНрдж рд░рд╣рд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ рдЖрдк рдкрд╣рд▓реЗ рд╕реНрд╡рд┐рдЪ рдХреЗ рд╕рд╛рде --overwrite --dry-run ред рдпрд╣ рдЖрдкрдХреЛ рдкрд░реЗрд╢рд╛рди рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЖрдкрдХреЛ рдкреВрд░реЗ рджрд┐рди рдмрд░реНрдмрд╛рдж рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред

рдпрджрд┐ рдЖрдк darcs рдХреЗ рдЙрдкрд▓рдмреНрдз рд╕рдВрд╕реНрдХрд░рдг рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ cabal use cabal info darcs рдЙрдкрдпреЛрдЧ use cabal info darcs рдФрд░ рдЙрдкрд▓рдмреНрдз рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХрд╛ use cabal info darcs Versions available: рдЕрдиреБрднрд╛рдЧред

рдмрд╛рдХреА рдордЬрд╝реЗрджрд╛рд░ рдЪреАрдЬреЗрдВ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЦреЗрд▓рдиреЗ рдХреЗ рд▓рд┐рдП (рдСрд░реНрдбрд░ рд╕реЗ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛):

Pronk рдЬреИрд╕реЗ рдкреИрдХреЗрдЬ рдХреЗ рд▓рд┐рдП, рдЬреЛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ Hackage рдореЗрдВ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИрдВ, рдХреЗрдмрд╛рд▓-рджреЗрд╡ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП:

 $ git clone https://github.com/bos/pronk.git /tmp/pronk-src && \ (cd /tmp/pronk-src; \ cabal-dev install -s /usr/local/Cellar/pronk/$(git rev-parse --short HEAD)) && \ rm -rf /tmp/pronk-src 

рдЬреАрдПрдЪрд╕реАрдЖрдИ рд╕реЗрдЯрдЕрдк


ghci рдПрдХ рдЗрдВрдЯрд░рдПрдХреНрдЯрд┐рд╡ GHC рдЗрдВрдЯрд░рдкреНрд░реЗрдЯрд░ (REPL рд╣реИ рдЬреЛ рдЯрд░реНрдорд┐рдирд▓ рдореЗрдВ python рдпрд╛ irb рдХреЗ рд╕рдорд╛рди рд╣реИ)ред рд╡рд┐рд╕реНрддреГрдд рдкреНрд░рд▓реЗрдЦрди рдХреЗ рд▓рд┐рдП, рдореИрдВ GHC рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЧрд╛рдЗрдб ( рдЕрдзреНрдпрд╛рдп 2. GHCi рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП ) рдХрд╛ рд╕рдВрджрд░реНрдн рджреЗрддрд╛ рд╣реВрдВред рдЖрдк рдХреЛрдб рдХреЗ рд╕рд╛рде рдЦреЗрд▓рдиреЗ рдореЗрдВ рдмрд╣реБрдд рд╕рдордп рдмрд┐рддрд╛рдПрдВрдЧреЗ, рдЗрд╕рд▓рд┐рдП рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ рдкрд╣рд▓реЗ рдЧреНрд░реАрдЯрд┐рдВрдЧ рдХреЛ рдЫреЛрдЯрд╛ рдХрд░реЗрдВред рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

 Prelude> 

рдЬрдм рдЖрдк рдореЙрдбреНрдпреВрд▓ рдЖрдпрд╛рдд рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЧреНрд░реАрдЯрд┐рдВрдЧ рдмрдврд╝реЗрдЧрд╛, рдФрд░ рдХрд┐рд╕реА рдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

 Prelude> :m + Data.List Prelude Data.List> :m + Data.Maybe Prelude Data.List Data.Maybe> 

рдпрд╣ .ghci рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдареАрдХ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдореИрдВ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ ASCII рдЪрд░рд┐рддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдХреБрдЫ ╬╗> рдЬреИрд╕рд╛ рдХреБрдЫ рд╣реИред

 echo ':set prompt "h> "' >> ~/.ghci 

рд╣рд░ рдмрд╛рд░ рдЬрдм рдЖрдк GHCi рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдХрдорд╛рдВрдб :set prompt "h> " рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рднреА рдмрд╣реБрдд рдмрдврд╝рд┐рдпрд╛ рд╣реИред

 $ ghci h> putStrLn "Hello World!" Hello World! h> 

рд╣реИрдХреЗрдЬ рдирд╛рдЬреБрдХ рд╣реИ, рд▓реЗрдХрд┐рди (рдЕрдиреМрдкрдЪрд╛рд░рд┐рдХ) рджрд░реНрдкрдг рдореМрдЬреВрдж рд╣реИрдВ


рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рд╣реИрдХреЗрдЬ рдХреЛ рдЗрд╕рдХреА рд╡рд┐рд╢реНрд╡рд╕рдиреАрдпрддрд╛ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рд╕рдорд╕реНрдпрд╛ рдХреНрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рд╡реЗ рдирд┐рдХрдЯ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЗрд╕рдХреЗ рд╕рд╛рде рдХреБрдЫ рдХрд░реЗрдВрдЧреЗред рдПрдХ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рд╣реИ ( рдПрдХ рд╣реИрдХреЗрдЬ рджреБрд░реНрдШрдЯрдирд╛ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдбреНрд╕ ), рдЖрдкрдХреЛ рдмрд╕ hdiff рд╕реЗ hdiff.luite.com рдкрд░ рдпрд╛ hackage.csc.stanford.edu рд╕реЗ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд▓рд╛рдЗрди рдХреЛ ~ / .abal / config рдореЗрдВ рдмрджрд▓реЗрдВ:

 remote-repo: hackage.haskell.org:http://hackage.haskell.org/packages/archive 

рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╕реЗ:

 -- TODO When hackage is back up, set back to hackage.haskell.org! -- remote-repo: hackage.haskell.org:http://hackage.haskell.org/packages/archive remote-repo: hdiff.luite.com:http://hdiff.luite.com/packages/archive -- remote-repo: hackage.csc.stanford.edu:http://hackage.scs.stanford.edu/packages/archive 

рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рдкреИрдХреЗрдЬреЛрдВ рдХреА рд╕реВрдЪреА рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛

 $ cabal update 

рдФрд░ рдереЛрдбрд╝реА рджреЗрд░ рдмрд╛рдж рд╕рдм рдХреБрдЫ рд╡рд╛рдкрд╕ рд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдордд рднреВрд▓рдирд╛!

рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдмрдирд╛рдПрдБ (рдХрд╛рдмрд▓-рджреЗрд╡ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ)


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

рдЕрдкрдиреА рдЦреБрдж рдХреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдЖрд╡рд╢реНрдпрдХ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреА рд╕реВрдЪреА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП -n рд╡рд┐рдХрд▓реНрдк рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред -n рд╡рд┐рдХрд▓реНрдк рд╕рднреА рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЖрдкрд╕реЗ рдХреБрдЫ рднреА рдирд╣реАрдВ рдкреВрдЫрддрд╛ рд╣реИред
 $ mkdir -p ~/src/hs-hello-world $ cd ~/src/hs-hello-world $ touch LICENSE $ cabal init -n --is-executable 

рдпрд╣ Setup.hs рдФрд░ hs-hello-world.cabal рдЬрдирд░реЗрдЯ рдХрд░реЗрдЧрд╛ред рдЕрдЧрд▓рд╛ рдХрджрдо рд▓рд╛рдЗрди рдХреЛ main-is: рд╕реЗ рдмрджрд▓рдирд╛ main-is: рддрд╛рдХрд┐ рдмрдВрдзрди рдХреЛ рдкрддрд╛ рдЪрд▓ рд╕рдХреЗ рдХрд┐ рдХрд┐рд╕ рд╕реНрд░реЛрдд рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░рдирд╛ рд╣реИред рдЕрдВрддрд┐рдо рдкрд░рд┐рдгрд╛рдо рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:

HS-рд╣реИрд▓реЛ-world.cabal

 -- Initial hs-hello-world.cabal generated by cabal init. For further -- documentation, see http://haskell.org/cabal/users-guide/ name: hs-hello-world version: 0.1.0.0 -- synopsis: -- description: license: AllRightsReserved license-file: LICENSE -- author: -- maintainer: -- copyright: -- category: build-type: Simple cabal-version: >=1.8 executable hs-hello-world main-is: HelloWorld.hs -- other-modules: build-depends: base ==4.5.* 

рдлрд┐рд░ рдЗрд╕ рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде HelloWorld.hs рдмрдирд╛рдПрдВ:

HelloWorld.hs

 main :: IO () main = putStrLn "Hello, world!" 

рдпрд╣рд╛рдВ рдЖрдкрдХреЛ рд╡рд░реНрддрдорд╛рди рд╕реИрдВрдбрдмреЙрдХреНрд╕ рдореЗрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдмрдирд╛рдиреЗ рдФрд░ "рдЗрдВрд╕реНрдЯреЙрд▓" рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
 $ cabal-dev install Resolving dependencies... Configuring hs-hello-world-0.1.0.0... Building hs-hello-world-0.1.0.0... Preprocessing executable 'hs-hello-world' for hs-hello-world-0.1.0.0... Installing executable(s) in /Users/bob/src/hs-hello-world/cabal-dev//bin Installed hs-hello-world-0.1.0.0 $ ./cabal-dev/bin/hs-hello-world Hello, world! 

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

рдЖрдк рд╕реНрдерд╛рдкрдирд╛ рдЪрд░рдг рдХреЛ рдЫреЛрдбрд╝ рдХрд░ рдереЛрдбрд╝рд╛ рд╕рдордп рдмрдЪрд╛ рд╕рдХрддреЗ рд╣реИрдВ:

 $ cabal-dev configure Resolving dependencies... Configuring hs-hello-world-0.1.0.0... $ cabal-dev build Building hs-hello-world-0.1.0.0... Preprocessing executable 'hs-hello-world' for hs-hello-world-0.1.0.0... [1 of 1] Compiling Main ( HelloWorld.hs, dist/build/hs-hello-world/hs-hello-world-tmp/Main.o ) Linking dist/build/hs-hello-world/hs-hello-world ... $ ./dist/build/hs-hello-world/hs-hello-world Hello, world! 

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

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕рдВрдХрд▓рди рдХреЗ рдмрд┐рдирд╛, рджреБрднрд╛рд╖рд┐рдпрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЪрд▓рд╛рдПрдВ:

 $ runghc HelloWorld.hs Hello, world! 

 $ ghci GHCi, version 7.4.2: http://www.haskell.org/ghc/ :? for help Loading package ghc-prim ... linking ... done. Loading package integer-gmp ... linking ... done. Loading package base ... linking ... done. Prelude> :load HelloWorld [1 of 1] Compiling Main ( HelloWorld.hs, interpreted ) Ok, modules loaded: Main. *Main> main Hello, world! 

рд╣рд╛рдВ, рдФрд░ рдЖрдк рдЗрд╕реЗ рдмрд┐рдирд╛ cabal-dev (рдпрд╛ cabal ) рдХреЗ рднреА рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ:

 $ runghc Setup.hs configure Configuring hs-hello-world-0.1.0.0... $ runghc Setup.hs build Building hs-hello-world-0.1.0.0... Preprocessing executable 'hs-hello-world' for hs-hello-world-0.1.0.0... [1 of 1] Compiling Main ( HelloWorld.hs, dist/build/hs-hello-world/hs-hello-world-tmp/Main.o ) Linking dist/build/hs-hello-world/hs-hello-world ... 

рд▓реЗрдХрд┐рди рдПрдХ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП, рдЖрдк cabal-dev ghci ( cabal-dev configure && cabal-dev build рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж cabal-dev configure && cabal-dev build ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдХреЛрдб рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рджреБрднрд╛рд╖рд┐рдпрд╛ рдореЗрдВ рд▓реЛрдб рд╣реЛ рдЬрд╛рдПрдЧрд╛:

 $ cabal-dev ghci on the commandline: Warning: -O conflicts with --interactive; -O ignored. GHCi, version 7.4.2: http://www.haskell.org/ghc/ :? for help Loading package ghc-prim ... linking ... done. Loading package integer-gmp ... linking ... done. Loading package base ... linking ... done. Ok, modules loaded: Main. h> main Hello, world! 

рдЬреАрдПрдЪрд╕реАрд╕реА рдореВрд▓ рдмрд╛рддреЗрдВ


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

: t рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ

 h> :t main main :: IO () h> :t map map :: (a -> b) -> [a] -> [b] h> :t map (+1) map (+1) :: Num b => [b] -> [b] 

: рдореИрдВ рдирд╛рдо рдЬрд╛рдирдХрд╛рд░реА (рдХрд╛рд░реНрдп, рдЯрд╛рдЗрдкрдХрд╛рд╕реНрдЯ, рдкреНрд░рдХрд╛рд░, рджрд┐рдЦрд╛рддрд╛ рд╣реИ ...)

 h> :i Num class Num a where (+) :: a -> a -> a (*) :: a -> a -> a (-) :: a -> a -> a negate :: a -> a abs :: a -> a signum :: a -> a fromInteger :: Integer -> a -- Defined in `GHC.Num' instance Num Integer -- Defined in `GHC.Num' instance Num Int -- Defined in `GHC.Num' instance Num Float -- Defined in `GHC.Float' instance Num Double -- Defined in `GHC.Float' h> :info map map :: (a -> b) -> [a] -> [b] -- Defined in `GHC.Base' h> :info Int data Int = ghc-prim:GHC.Types.I# ghc-prim:GHC.Prim.Int# -- Defined in `ghc-prim:GHC.Types' instance Bounded Int -- Defined in `GHC.Enum' instance Enum Int -- Defined in `GHC.Enum' instance Eq Int -- Defined in `ghc-prim:GHC.Classes' instance Integral Int -- Defined in `GHC.Real' instance Num Int -- Defined in `GHC.Num' instance Ord Int -- Defined in `ghc-prim:GHC.Classes' instance Read Int -- Defined in `GHC.Read' instance Real Int -- Defined in `GHC.Real' instance Show Int -- Defined in `GHC.Show' 

: m рдореЙрдбреНрдпреВрд▓ рдХреЛ рд╡рд░реНрддрдорд╛рди рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдЬреЛрдбрд╝рддрд╛ рд╣реИ

 h> :m + Data.List h> sort [10,9..1] [1,2,3,4,5,6,7,8,9,10] 

: рдореЙрдбреНрдпреВрд▓ рд▓реЛрдб рдХрд░рддрд╛ рд╣реИ,: рдЖрд░ рдкреБрдирдГ рд▓реЛрдб рдХрд░рддрд╛ рд╣реИ

 h> :! echo 'hello = print "hello"' > Hello.hs h> :l Hello [1 of 1] Compiling Main ( Hello.hs, interpreted ) Ok, modules loaded: Main. h> hello "hello" h> :! echo 'hello = print "HELLO"' > Hello.hs h> :r [1 of 1] Compiling Main ( Hello.hs, interpreted ) Ok, modules loaded: Main. h> hello "HELLO" 

рдЕрдиреБрд╢рдВрд╕рд┐рдд рдкрдврд╝рдирд╛


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

рдХрд┐рддрд╛рдмреЗрдВ



рд╕рд╛рдЗрдЯреЛрдВ


рдЖрдИрдЖрд░рд╕реА

Freenode рдкрд░ #haskell рд╡рд╣ рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдВ рдЖрдк рдХрд┐рд╕реА рднреА рд╕рдордп рд╣рд╛рд╕реНрдХреЗрд▓ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрдиреЗ рд╡рд╛рд▓реЗ рдХрдИ рд╕реМ рд▓реЛрдЧреЛрдВ рдХреЛ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдорджрдж рдХреЗ рд▓рд┐рдП рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдмрдврд╝рд┐рдпрд╛ рдЬрдЧрд╣ рд╣реИред

рд╕реБрдЭрд╛рд╡?


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

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


All Articles