рд╣рдо рд▓рд┐рдЦрддреЗ рд╣реИрдВ "рд╣реИрд▓реЛ, рджреБрдирд┐рдпрд╛!" рд╣рд╛рд╕реНрдХреЗрд▓ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди (Spock)

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


рд╣рд╛рд╕реНрдХреЗрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝рд╛ рдФрд░ рдЗрд╕реЗ рдХреИрд╕реЗ рдкрдХрд╛рдиреЗ рдХреЗ рд▓рд┐рдП


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


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


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


рдирдорд╕реНрддреЗ рджреБрдирд┐рдпрд╛!


рдЯреНрд░реЗрдирд┐рдВрдЧ


рд╣рдо рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдореЗрдВ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╕рдм рдХреБрдЫ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВред рд╡рд╣рд╛рдБ рд╡реЗ рдкрд╣рд▓реЗ рд╕реНрдЯреИрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рдорд╛рдирдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрддреЗ рд╣реИрдВ: stack new MyLovelyProlect ред рдорд╛рдирдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рддреАрди рд╕рдмрдлрд╝реЛрд▓реНрдбрд░реНрд╕ рд╡рд╛рд▓рд╛ рдПрдХ рдлрд╝реЛрд▓реНрдбрд░ рд╣реИ: app , src , test ред рдпрд╣ рдмрд╣реБрдд рддрд╛рд░реНрдХрд┐рдХ рд▓рдЧрддрд╛ рд╣реИ: рдореБрдЦреНрдп рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рдлрд╝реЛрд▓реНрдбрд░, рд╕рд╣рд╛рдпрдХ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ, рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рддреАрд╕рд░рд╛ред рдЪреВрдВрдХрд┐ рд╣рдо "рд╣реИрд▓реЛ, рджреБрдирд┐рдпрд╛!" рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ src рдФрд░ test рдлрд╝реЛрд▓реНрдбрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рд╣рдЯрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЕрдиреНрдпрдерд╛ рд╣рдореЗрдВ рдЕрдиреНрдп рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕рд╛рд╡рдзрд╛рдиреАрдкреВрд░реНрд╡рдХ рд╕рд╛рдл рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, HelloWorld.cabal ред


рджрд░рдЕрд╕рд▓, рдХреЛрдб


рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдореЗрдВ рдЖрдЧреЗ рдпрд╣ рдХреБрдЫ рдХреЛрдб рдХреЛ Main.hs рдореЗрдВ рдХреЙрдкреА рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рд╣реИред рдлреНрд▓рд╛рд╕реНрдХ рдХреА рдкреЗрд╢рдХрд╢ рдХреЗ рд╕рд╛рде рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдо рдЗрд╕реЗ рдереЛрдбрд╝рд╛ рдФрд░ рд╕рд░рд▓ рдХрд░реЗрдВрдЧреЗред


 {-# LANGUAGE OverloadedStrings #-} module Main where import Web.Spock import Web.Spock.Config app :: SpockM () () () () app = get root $ text "Hello World!" main :: IO () main = do cfg <- defaultSpockCfg () PCNoDatabase () let mw = spock cfg app runSpock 8080 mw 

рддреБрд▓рдирд╛ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдлреНрд▓рд╛рд╕реНрдХ рдореЗрдВ рдПрдХ рд╣реА рдХреЛрдб рджреВрдВрдЧрд╛:


 from flask import Flask app = Flask(__name__) @app.route("/") def hello(): return "Hello World!" app.run() 

рд▓рд╛рдЗрдиреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╕реЗ, рдлреНрд▓рд╛рд╕реНрдХ рдЕрднреА рднреА рдЬреАрддрддрд╛ рд╣реИ: 8 рдмрдирд╛рдо 13. рд▓реЗрдХрд┐рди рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рд╣рд╛рд╕реНрдХреЗрд▓ рдПрдХ рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп рд░реВрдк рд╕реЗ рдЯрд╛рдЗрдк рдХреА рдЧрдИ рднрд╛рд╖рд╛ рд╣реИ рдФрд░ 2 рд▓рд╛рдЗрдиреЗрдВ рдЯрд╛рдЗрдк рдирд┐рд░реНрдзрд╛рд░рдг рдкрд░ рдХрдмреНрдЬрд╛ рдХрд░рддреА рд╣реИрдВ, рдЕрдВрддрд░, рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдЫреЛрдЯрд╛ рд╣реИред рдХрдо рд╕реЗ рдХрдо рдКрдкрд░ рджрд┐рдП рдЧрдП рдХреЛрдб рдиреЗ рдореБрдЭреЗ рднрд╛рд╖рд╛ рд╕реАрдЦрдиреЗ рд╕реЗ рдирд╣реАрдВ рдбрд░рд╛рдпрд╛ред


рдЕрд╕реЗрдВрдмрд▓реА рдФрд░ рд▓реЙрдиреНрдЪ


рдЗрд╕рдХреЗ рдмрд╛рдж, HelloWorld.cabal рдФрд░ executable HelloWorld-exe рдХреЛ build-depends: рдЕрдиреБрднрд╛рдЧ build-depends: рд▓рд╛рдЗрди Spock >=0.13 ред рд╕рд╛рдЗрдЯ рдкрд░ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдореЗрдВ, 2 рдФрд░ рдирд┐рд░реНрднрд░рддрд╛ рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╣реИ, рд▓реЗрдХрд┐рди рдореЗрд░реЗ рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ рдЕрднреА рддрдХ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдпрджрд┐ рд╣рдо рдЕрдм stack build --fast --pedantic рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИ:


 Error: While constructing the build plan, the following exceptions were encountered: In the dependencies for HelloWorld-0.1.0.0: Spock must match >=0.13, but the stack configuration has no specified version (latest matching version is 0.13.0.0) needed since HelloWorld is a build target. Some different approaches to resolving this: * Consider trying 'stack solver', which uses the cabal-install solver to attempt to find some working build configuration. This can be convenient when dealing with many complicated constraint errors, but results may be unpredictable. * Recommended action: try adding the following to your extra-deps in /Users/dkvasov/Documents/Haskell/Spock/HelloWorld/stack.yaml: Spock-0.13.0.0@sha256:8115862eb4fb84a26fb7bcd34f30acf036bd2e7c4eaf813c185c5562d138bba2 Plan construction failed. 

рдпрд╣ рдмрд╣реБрдд рд╕реНрдкрд╖реНрдЯ рд╣реИ: рд╕реНрдЯреИрдХ рдХреЛ рдирд╣реАрдВ рдкрддрд╛ рд╣реИ рдХрд┐ Spock рдХреЗ рдХрд┐рд╕ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ stack.yaml рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред extra-deps рдЬреЛрдбрд╝реЗрдВ рдФрд░ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВред рдЗрд╕реА рддрд░рд╣ рдХреА рдХреБрдЫ рдЕрдиреНрдп рддреНрд░реБрдЯрд┐рдпрд╛рдБ рд╕рд╛рдордиреЗ stack.yaml , рдФрд░ рдЗрд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, stack.yaml рдлрд╝рд╛рдЗрд▓ рдореЗрдВ, рдореБрдЭреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдорд┐рд▓рд╛:


 extra-deps: - Spock-0.13.0.0 - Spock-core-0.13.0.0 - reroute-0.5.0.0 - stm-containers-0.2.16 - focus-0.1.5.2 

рдЗрд╕рдХреЗ рдмрд╛рдж рд╕рдм рдХреБрдЫ рдЗрдХрдЯреНрдард╛ рд╣реЛ рдЧрдпрд╛ред рдореЗрд░реЗ рд╕рдВрдЧреНрд░рд╣ рдХреА рдХрд▓рд╛рдХреГрддрд┐рдпрд╛рдБ .stack-work/dist/x86_64-osx/Cabal-2.4.0.1/build ред


рд╕рдм рдХреБрдЫ рдХрдорд╛рдВрдб stack exec HelloWorld-exe рд╕рд╛рде рд╢реБрд░реВ рд╣реБрдЖ, рдФрд░ stack exec HelloWorld-exe рдкрд░ localhost:8080 рдореИрдВрдиреЗ рд╕реНрд╡рд╛рдЧрдд рдХрд┐рдпрд╛ "рд╣реИрд▓реЛ, рджреБрдирд┐рдпрд╛!"ред рдПрдХ рдирд░реНрддрдХреА рдХреЗ рд╕рд╛рде рдиреГрддреНрдп рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рдереАред


рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдЬрд╛ рд░рд╣реА рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИред


рдЕрдм рддрдХ, рд╣рдордиреЗ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ (рдПрдлрдкреА) рдФрд░ рд╣рд╛рд╕реНрдХреЗрд▓ рднрд╛рд╖рд╛ рдХреЗ рдХрд┐рд╕реА рднреА рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЬреНрдЮрд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИред рд╣рдордиреЗ рд╡рд┐рдХрд╛рд╕ рдХреА рдореВрд▓ рдмрд╛рддреЛрдВ рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рдЬреНрдЮрд╛рди рдФрд░ рдЬреНрдЮрд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред рдЖрдк рдЗрд╕ рддрд░рд╣ рд╕реЗ рдирд╣реАрдВ рдЬрд╛ рд╕рдХрддреЗ рдЖрдЧреЗ рдХреА рд╕рдордЭ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ AF рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдмрд╛рддреЗрдВ рдЬрд╛рдирдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред AF OOP рдХрд╛ рдПрдВрдЯреАрдкреЛрдб рдирд╣реАрдВ рд╣реИред рд╕реНрдХрд╛рд▓рд╛ рднрд╛рд╖рд╛ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд▓реЛрдЧ рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдпреЗ рджреЛрдиреЛрдВ рдЕрд╡рдзрд╛рд░рдгрд╛рдПрдВ рдЖрд╕рд╛рдиреА рд╕реЗ рд╕рд╣рд╡рд╛рд╕ рдХрд░рддреА рд╣реИрдВред рдПрдлрдкреА рдХрд╛ рдПрдВрдЯрд┐рдкреЛрдб рдЕрдирд┐рд╡рд╛рд░реНрдп рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд╣реИред рдЬрдмрдХрд┐ рдЧрдгрдирд╛рдУрдВ рдХрд╛ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдореЙрдбрд▓ рдХрд╛рд░реНрдпреЛрдВ рдХреА рд╕рдВрд░рдЪрдирд╛ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдирд┐рд╡рд╛рд░реНрдп рдореЙрдбрд▓ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд░рд╛рдЬреНрдпреЛрдВ рдореЗрдВ рдХреНрд░рдорд┐рдХ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реИ рдХрд┐ рд╡рд┐рд╢реБрджреНрдз рд░реВрдк рд╕реЗ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдЬреИрд╕реЗ рд╣рд╛рд╕реНрдХреЗрд▓, рдпрд╣ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдлрд╝рдВрдХреНрд╢рди "рд╢реБрджреНрдз" рд╣реИрдВ, рдЕрд░реНрдерд╛рдд, рдЙрдирдореЗрдВ рд╡рд╛рдкрд╕реА рдореВрд▓реНрдп рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдХ рдкрд░рд╕реНрдкрд░ рд╕реНрдерд┐рддрд┐ рдФрд░ "рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯреНрд╕" рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИрдВред рдЗрд╕рд╕реЗ рдлреАрдЪрд░ рд░рдЪрдирд╛рдУрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рджрд░рдЕрд╕рд▓, "рд╢реБрджреНрдзрддрд╛" рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛ рдореЗрдВ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рднрд╛рд╖рд╛рдУрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдкрд░ рдХрдИ рдкреНрд░рддрд┐рдмрдВрдз рд▓рдЧрд╛рддреА рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЪреВрдВрдХрд┐ рд╣рд╛рд╕реНрдХреЗрд▓ рдкрд░ рдЙрддреНрдкрд╛рджрди рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╣реИрдВ, рддреЛ рдЖрдк рдЕрднреА рднреА рдХрд┐рд╕реА рддрд░рд╣ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛ рдореЗрдВ рд╢реБрджреНрдз рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдЗрдП рд╣рдорд╛рд░реЗ Main.hs рдкрд░ Main.hs


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


SpockM рдХреЛ рдЪрд╛рд░ рдЕрдиреНрдп рдкреНрд░рдХрд╛рд░реЛрдВ рджреНрд╡рд╛рд░рд╛ рдкрд░рд┐рдЪрд╛рд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╡реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдХрдиреЗрдХреНрд╢рди, рд╕рддреНрд░, рд╕реНрдерд┐рддрд┐ рдФрд░ рд░рд┐рдЯрд░реНрди рд╡реИрд▓реНрдпреВ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реИрдВред рдПрдХ рдЦрд╛рд▓реА рдЖрд╡реЗрджрди рдХреЗ рд▓рд┐рдП, рдЗрд╕рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рд╣рдореЗрд╢рд╛ рдкреНрд░рдХрд╛рд░ () рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рдЬрд┐рд╕реЗ рдпреВрдирд┐рдЯ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред app рдЕрдВрджрд░ app рд╣рдо рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдкрде рдмрд╛рдБрдзрддреЗ рд╣реИрдВред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдордиреЗ рдЖрдзрд╛рд░ рдкрде рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдХрд┐рдпрд╛ / рдФрд░ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдиреЗ "Hello, world! get- ред


рдЕрдЧрд▓рд╛, рд╣рдо рдПрдХ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ cfg рдХреЛ рдЕрд╕рд╛рдЗрди рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдмрд╛рдж, spock рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП spock рдРрдк рдФрд░ runSpock рдХреЗ рд▓рд┐рдП рдорд┐рдбрд▓рд╡реЗрдпрд░ рдмрдирд╛рдПрдВ рдФрд░ рдЗрд╕реЗ рд╡рд╛рдВрдЫрд┐рдд рд▓реЙрдиреНрдЪ рдкреЛрд░реНрдЯ рдХреЗ рд╕рд╛рде runSpock рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВред


рдирд┐рд╖реНрдХрд░реНрд╖


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


рд╕рдВрджрд░реНрдн


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


All Articles