
рдореЗрд░реЗ рдкрд╛рд╕ рд╣рд╛рд▓ рдХреЗ рдорд╣реАрдиреЛрдВ рдореЗрдВ рд╣рд╛рд╕реНрдХреЗрд▓ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЕрджреНрднреБрдд рд╕рдордп рдерд╛, рдФрд░ рдореБрдЭреЗ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдкрд╛рда рдореЗрдВ рдкрд╣рд▓рд╛ рдХрджрдо рдЙрдард╛рдирд╛ рдЬрд┐рддрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЙрд╕рд╕реЗ рдХрд╣реАрдВ рдЕрдзрд┐рдХ рдХрдард┐рди рд╣реИред рдореИрдВ рд╕рд╣реА рд╕рдордп рдФрд░ рд╕рд╣реА рдЬрдЧрд╣ рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднрд╛рдЧреНрдпрд╢рд╛рд▓реА рдерд╛, рдФрд░ рдлреЗрд╕рдмреБрдХ рдкрд░ рдореИрдВрдиреЗ
рдмреНрд░рд╛рдпрди рдУ'рд╕реБрд▓реНрд▓рд┐рд╡рди рд╕реЗ рд╣рд╛рд╕реНрдХреЗрд▓ рдкрд╛рдареНрдпрдХреНрд░рдо рд▓рд┐рдпрд╛, рд▓реЗрдХрд┐рди рдЖрдк рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рджреВрд╕рд░реЛрдВ рдХреА рдорджрдж рдХреЗ рдмрд┐рдирд╛ рд╡рд┐рд╖рдп рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк
рдХреЛрд╢рд┐рд╢ рд╣рд╛рд╕реНрдХреЗрд▓ рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рд╣рд╛рд╕реНрдХреЗрд▓ рдЦреЗрд▓ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЕрдВрддрддрдГ рдЕрдкрдиреЗ рд▓рд┐рдП рдЬреАрдПрдЪрд╕реА рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд╣рд╛рд╕реНрдХреЗрд▓ рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдо (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:
рдЕрдиреБрднрд╛рдЧред
рдмрд╛рдХреА рдордЬрд╝реЗрджрд╛рд░ рдЪреАрдЬреЗрдВ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЦреЗрд▓рдиреЗ рдХреЗ рд▓рд┐рдП (рдСрд░реНрдбрд░ рд╕реЗ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛):
- рдкрдВрдбреЛрдХ - рдорд╛рд░реНрдХрдЕрдк рдкреНрд░рд╛рд░реВрдкреЛрдВ (рдорд╛рд░реНрдХреЗрдбрд╛рдЙрди, рд░рд┐рд╕реНрдЯреНрд░рдХреНрдЪрд░рдЯреЗрд░рдЯреЗрдХреНрд╕реНрдЯ, рдСрд░реНрдЧ-рдореЛрдб, рд▓рд╛рдЯреЗрдПрдХреНрд╕ рдЖрджрд┐) рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рд╕реНрд╡рд┐рд╕ рдЪрд╛рдХреВред
- gitit - рдПрдХ рд╡рд┐рдХреА рд░рдирд┐рдВрдЧ git, рдбрд╛рд░реНрдХреНрд╕ рдпрд╛ рдорд░реНрдХреНрдпреВрд░рд┐рдХрд▓
- pronk рдЕрдм рдФрд░ рдХреИрдВрдкрд░ рдХреЗ рд╕рдорд╛рди HTTP рд▓реЛрдб рдЯреЗрд╕реНрдЯрд┐рдВрдЧ рдЯреВрд▓ рд╣реИ, рдХреЗрд╡рд▓ рдЖрдзреБрдирд┐рдХ рдФрд░ рд╕рд░рд▓
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:
рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╕реЗ:
рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рдкреИрдХреЗрдЬреЛрдВ рдХреА рд╕реВрдЪреА рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛
$ 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
рдлрд┐рд░ рдЗрд╕ рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде
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
: 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"
рдЕрдиреБрд╢рдВрд╕рд┐рдд рдкрдврд╝рдирд╛
рдореИрдВрдиреЗ рдЕрдкрдиреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреБрд╕реНрддрдХреЛрдВ рдФрд░ рд╡реЗрдмрд╕рд╛рдЗрдЯреЛрдВ рдХреЛ рдЙрдкрдпреЛрдЧреА рдмрддрд╛рдпрд╛, рдЬрдмрдХрд┐ рдореИрдВ рдЦреБрдж рд╣рд╛рд╕реНрдХреЗрд▓ рдХреЛ рдкрдврд╝рд╛ рд░рд╣рд╛ рдерд╛ред
рдХрд┐рддрд╛рдмреЗрдВ
- рдЧреБрдб рдХреЗ рд▓рд┐рдП рд╣рд╛рд╕реНрдХреЗрд▓ рдХрд╛ рдЕрдиреНрд╡реЗрд╖рдг рдХрд░реЗрдВ!
рдпрд╣ рдкреБрд╕реНрддрдХ рдореЗрд░реЗ рд▓рд┐рдП рдПрдХ рдорд╣рд╛рди рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдмрд┐рдВрджреБ рдмрди рдЧрдИ, рдореИрдВ рдЗрд╕реЗ рдкрд╣рд▓реЗ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВред рдпрд╣ рдЖрдкрдХреЛ GHC рдХреА рдкреВрд░реА рд╕рдордЭ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЧрд╣рд░рд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж рдореИрдВрдиреЗ рд╕рд╣рдЬ рд▓реЗрдЦрди рдФрд░ рд╣рд╛рд╕реНрдХреЗрд▓ рдХреЛрдб рдХреЛ рд╕рдордЭрдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛ред - рдЕрд╕рд▓реА рджреБрдирд┐рдпрд╛ рд╣рд╛рд╕реНрдХреЗрд▓
рдпрд╣ рдЖрдХрд╛рд░ рдФрд░ рдЧрд╣рд░рд╛рдИ рджреЛрдиреЛрдВ рдореЗрдВ рдПрдХ рд╡рдЬрдирджрд╛рд░ рдкреБрд╕реНрддрдХ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЗрд╕реЗ рд╢реБрд░реБрдЖрддреА рд╕реЗ рднреА рд╕реБрд▓рдн рд╣реЛрдиреЗ рд╕реЗ рдирд╣реАрдВ рд░реЛрдХрддрд╛ рд╣реИред рдпрд╣ рд░рд┐рдпрд▓ рд╡рд░реНрд▓реНрдб рдХреА рдХрдИ рдЪреАрдЬреЛрдВ рдХреЛ рдХрд╡рд░ рдХрд░рддрд╛ рд╣реИ: рдЯреЗрд╕реНрдЯ рд▓рд┐рдЦрдирд╛, рдкреНрд░реЛрдлрд╛рдЗрд▓рд┐рдВрдЧ, рдЖрдИрдУ, рдХрдВрд╕реАрдбрд░, рдЖрджрд┐ред рдореИрдВ рдЕрднреА рднреА рдЗрд╕рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдкреБрд╕реНрддрдХ рдЕрд╡рд╢реНрдп рдкрдврд╝реЗрдВред
рд╕рд╛рдЗрдЯреЛрдВ
- CS240h: рд╣рд╛рд╕реНрдХреЗрд▓ рдореЗрдВ рдлрд╝рдВрдХреНрд╢рдирд▓ рд╕рд┐рд╕реНрдЯрдо - рдпрд╣ рдбреЗрд╡рд┐рдб рдорд╛рдЬрд╝рд┐рдПрд░реЗрд╕ рдФрд░ рдмреНрд░рд╛рдпрди рдУ'рд╕реБрд▓реАрд╡рди рджреНрд╡рд╛рд░рд╛ рдкрдврд╝рд╛рдП рдЧрдП рд╕реНрдЯреИрдирдлреЛрд░реНрдб рдореЗрдВ рд╣рд╛рд╕реНрдХреЗрд▓ рдкрд╛рдареНрдпрдХреНрд░рдо рдерд╛ред рдпрд╣ рдЙрд╕реА рддрд░рд╣ рд╣реИ (рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рджрд╛рдпрд░рд╛ рд╡реНрдпрд╛рдкрдХ рд╣реИ) рдЬреЛ рдореИрдВрдиреЗ рдлреЗрд╕рдмреБрдХ рдкрд░ рд▓рд┐рдпрд╛ рдерд╛ред рд╡реНрдпрд╛рдЦреНрдпрд╛рди рдиреЛрдЯреНрд╕ рдФрд░ рдХрд╛рд░реНрдпрдХреНрд░рдо рд╕рд┐рд░реНрдл рд╢рд╛рдирджрд╛рд░ рд╣реИрдВ, рдЙрди рд╕рднреА рдХреЛ рдкрдврд╝реЗрдВ!
- рдЕрд╕рд▓реА рджреБрдирд┐рдпрд╛ рд╣рд╛рд╕реНрдХреЗрд▓
- рдЖрдк рдПрдХ рд╣рд╛рд╕реНрдХреЗрд▓ рдЬрд╛рдиреЗрдВ
- haskell.org рдПрдХ рдмреЗрд╣рддрд░реАрди рдЧреЛрддрд╛ рдЖрдЗрдЯрдо рд╣реИ, рд╡рд╣рд╛рдВ рдЖрдкрдХреЛ рдпреЗ рд╕рднреА рд▓рд┐рдВрдХ + MUCH рдЕрдзрд┐рдХ рдорд┐рд▓реЗрдВрдЧреЗред рд╡рд╣рд╛рдБ рдмрд╣реБрдд рд╕рдордп рдмрд┐рддрд╛рдиреЗ рдХреА рдЙрдореНрдореАрдж рд╣реИ!
- H-99 рдореЗрдВ рдХреБрдЫ рдЫреЛрдЯреА рдкрд╣реЗрд▓рд┐рдпрд╛рдВ рд╣реИрдВ, рдЬрд┐рди рдкрд░ рдЖрдк рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдмрд╣реБрдд рдХреБрдЫ рдпреВрд▓рд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреА рддрд░рд╣ рд╣реИред LYAH рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж рдЙрдиреНрд╣реЗрдВ рд╣рд▓ рдХрд░рдирд╛ рдХрд╛рдлреА рдЖрд╕рд╛рди рд╣реИред
- рдЯрд╛рдЗрдкреЗрдХреЗрд▓реЛрдкреЗрдбрд┐рдпрд╛ рдХрдИ рд╣рд╛рд╕реНрдХреЗрд▓ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдЯрд╛рдЗрдкрдХреНрд▓рд╛рд╕ рдХреА рдЦреЛрдЬ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрддреНрдХреГрд╖реНрдЯ рд╕рдВрд╕рд╛рдзрди рд╣реИред
- Hoogle рдПрдХ Haskell API рдЦреЛрдЬ рдЗрдВрдЬрди рд╣реИ рдЬреЛ рдХрд┐ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рджреНрд╡рд╛рд░рд╛ рдЦреЛрдЬ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ! рдореИрдВрдиреЗ рдЙрд╕рдХреЗ рдкреАрдЫреЗ рдмрд╣реБрдд рд╕рдордп рдмрд┐рддрд╛рдпрд╛ред
- Hayoo! рдПрдХ рдЕрдиреНрдп рдЦреЛрдЬ рдЗрдВрдЬрди, рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИ рдЬрдм Hoogle рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрд╡рд╢реНрдпрдХ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИ
- HWN - рд╣рд╛рд╕реНрдХреЗрд▓ рдХрд╛ рд╕рд╛рдкреНрддрд╛рд╣рд┐рдХ рд╕рдорд╛рдЪрд╛рд░ рдкрддреНрд░ рдЬреЛ рдИрдореЗрд▓ рд╕реВрдЪрд┐рдпреЛрдВ рд╕реЗ рдкреНрд░рдореБрдЦ рдмрд┐рдВрджреБрдУрдВ рдХреЛ рдПрдХрддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ, рд╕реНрдЯреИрдХрдУрд╡рд░рдлреНрд▓реЛ, рд░реЗрдбрд┐рдЯ, рдЖрджрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкреНрд░рд╢реНрдиред
- рд╣рд╛рд╕реНрдХреЗрд▓ :: рд░реЗрдбрд┐рдЯ - рд╣рд╛рд╕реНрдХреЗрд▓ рд╕рдмреНрд░реЗрдбрд┐рдЯ
- рд╕реНрдЯреИрдХрдУрд╡рд░рдлрд╝реНрд▓реЛ - рд╣реИрд╕реНрдХреЗрд▓ - рд╕реНрдЯреИрдХрдУрд╡рд░рдлрд╝реНрд▓реЛ рдкрд░ рд╣рд╛рд╕реНрдХреЗрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рд╡рд╛рд▓, рдЕрдХреНрд╕рд░ рдкрдврд╝рдиреЗ рд▓рд╛рдпрдХ (рдИрдорд╛рдирджрд╛рд░ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЕрдХреНрд╕рд░ рдПрдЪрдбрдмреНрд▓реНрдпреВрдПрди рдкрд░ рд╡рд╣рд╛рдВ рдмреИрдарддрд╛ рд╣реВрдВ)
- рд╕реА 9 рд╡реНрдпрд╛рдЦреНрдпрд╛рди: рдПрдлрдкреА рдлрдВрдбрд╛рдореЗрдВрдЯрд▓ 13 рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдХреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЗ рдлрдВрдбрд╛рдореЗрдВрдЯрд▓реНрд╕ (рд╣рд╛рд╕реНрдХреЗрд▓ рдореЗрдВ) рдкрд░ рд╡реНрдпрд╛рдЦреНрдпрд╛рди, рдбреЙред рдПрд░рд┐рдХ рдореЗрдЬрд░ (рдореИрдВрдиреЗ рдЙрдиреНрд╣реЗрдВ рдЕрднреА рддрдХ рдирд╣реАрдВ рджреЗрдЦрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЙрдиреНрд╣реЗрдВ рдПрдбрдо рдмреНрд░реАрди рдиреЗ рд╕рд▓рд╛рд╣ рджреА рд╣реИ )ред
рдЖрдИрдЖрд░рд╕реА
Freenode рдкрд░ #haskell рд╡рд╣ рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдВ рдЖрдк рдХрд┐рд╕реА рднреА рд╕рдордп рд╣рд╛рд╕реНрдХреЗрд▓ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрдиреЗ рд╡рд╛рд▓реЗ рдХрдИ рд╕реМ рд▓реЛрдЧреЛрдВ рдХреЛ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдорджрдж рдХреЗ рд▓рд┐рдП рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдмрдврд╝рд┐рдпрд╛ рдЬрдЧрд╣ рд╣реИред
рд╕реБрдЭрд╛рд╡?
рдореИрдВ рдкреНрд░рд╕реНрддрд╛рд╡реЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдпрд╣ рд╕рдм рд░рдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛ рд░рд╣рд╛ рд╣реВрдВред рдЕрдЧрд░ рдореИрдВ рдХреБрдЫ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдпрд╛рдж рдХрд┐рдпрд╛, рдореБрдЭреЗ рдкрддрд╛ рд╣реИ! рдореИрдВ рдПрдХ рдкреВрд░реА рддрд╕реНрд╡реАрд░ рдмрдирд╛рдиреЗ рдХрд╛ рджрд┐рдЦрд╛рд╡рд╛ рдирд╣реАрдВ рдХрд░рддрд╛, рдпрд╣ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рд╛рд╕реНрдХреЗрд▓ рд╡рд┐рдХреА рдЗрд╕реЗ рдФрд░ рдмреЗрд╣рддрд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдореИрдВ рдореБрдЦреНрдп рдмрд┐рдВрджреБрдУрдВ рдкрд░ рдХрдмреНрдЬрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред