рдпрд╣ рдПрдл # рдореЗрдВ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдкрд░ рд▓реЗрдЦреЛрдВ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рднрд╛рдЧ 9 рд╣реИ! рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рд╣рдмреЗрд░рд╛ рдкрд░ рдРрд╕реЗ рдмрд╣реБрдд рд▓рдВрдмреЗ рдЪрдХреНрд░ рдирд╣реАрдВ рд╣реИрдВред рд▓реЗрдХрд┐рди рд╣рдо рд░реБрдХрдиреЗ рд╡рд╛рд▓реЗ рдирд╣реАрдВ рд╣реИрдВред рдЖрдЬ рд╣рдо рдиреЗрд╕реНрдЯреЗрдб рдлрд╝рдВрдХреНрд╢рдВрд╕, рдореЙрдбреНрдпреВрд▓, рдиреЗрдорд╕реНрдкреЗрд╕, рдФрд░ рдорд┐рдХреНрд╕рд┐рдВрдЧ рдкреНрд░рдХрд╛рд░ рдФрд░ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗред

рдЕрдм рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХреИрд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдП, рд▓реЗрдХрд┐рди рдЙрдиреНрд╣реЗрдВ рдХреИрд╕реЗ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдП?
рдПрдл # рдореЗрдВ рддреАрди рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ:
- рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЕрдиреНрдп рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рдирд┐рд╣рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
- рдЖрд╡реЗрджрди рд╕реНрддрд░ рдкрд░, рд╢реАрд░реНрд╖-рд╕реНрддрд░реАрдп рдХрд╛рд░реНрдпреЛрдВ рдХреЛ "рдореЙрдбреНрдпреВрд▓" рдореЗрдВ рд╡рд░реНрдЧреАрдХреГрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
- рдпрд╛ рдЖрдк рдСрдмреНрдЬреЗрдХреНрдЯ-рдУрд░рд┐рдПрдВрдЯреЗрдб рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдкрд╛рд▓рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕рдВрд▓рдЧреНрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рд╣рдо рдкрд╣рд▓реЗ рджреЛ рддрд░реАрдХреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗ, рдФрд░ рд╢реЗрд╖ рдЕрдЧрд▓реЗ рдореЗрдВред
рдиреЗрд╕реНрдЯреЗрдб рдХрд╛рд░реНрдп
F # рдореЗрдВ, рдЖрдк рдЕрдиреНрдп рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдЕрдВрджрд░ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рд╕рд╣рд╛рдпрдХ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдПрдирдХреИрдкреНрд╕реБрд▓реЗрдЯ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рд╣реИ рдЬреЛ рдХреЗрд╡рд▓ рдореБрдЦреНрдп рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИрдВ рдФрд░ рдмрд╛рд╣рд░ рд╕реЗ рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдореЗрдВ addThreeNumbers
рдореЗрдВ addThreeNumbers
:
let addThreeNumbers xyz = // let add n = fun x -> x + n // x |> add y |> add z addThreeNumbers 2 3 4
рдирд┐рд╣рд┐рдд рдХрд╛рд░реНрдп рд╕реАрдзреЗ рдореВрд▓ рдорд╛рдкрджрдВрдбреЛрдВ рддрдХ рдкрд╣реБрдВрдЪ рд╕рдХрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдЗрд╕рдХреЗ рджрд╛рдпрд░реЗ рдореЗрдВ рд╣реИрдВред
рддреЛ, рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, printError
рдиреЗрд╕реНрдЯреЗрдб рдлрд╝рдВрдХреНрд╢рди printError
рдорд╛рдкрджрдВрдбреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╡рд╣ рд╕реАрдзреЗ n
рдФрд░ max
рдкрд╣реБрдВрдЪ рд╕рдХрддрд╛ рд╣реИред
let validateSize max n = // let printError() = printfn "Oops: '%i' is bigger than max: '%i'" n max // if n > max then printError() validateSize 10 9 validateSize 10 11
рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд╛рдорд╛рдиреНрдп рдкреИрдЯрд░реНрди рдореБрдЦреНрдп рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬреЛ рдиреЗрд╕реНрдЯреЗрдб рдкреБрдирд░рд╛рд╡рд░реНрддреА рд╕рд╣рд╛рдпрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдорд╛рдиреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдРрд╕реЗ рдХреЛрдб рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ:
let sumNumbersUpTo max = // let rec recursiveSum n sumSoFar = match n with | 0 -> sumSoFar | _ -> recursiveSum (n-1) (n+sumSoFar) // recursiveSum max 0 sumNumbersUpTo 10
рдЧрд╣рд░реА рдШреЛрдВрд╕рд▓реЗ рдХреЗ рд╢рд┐рдХрд╛рд░ рд╕реЗ рдмрдЪрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдЪрд░ рдХреЗ рд▓рд┐рдП рд╕реАрдзреА рдкрд╣реБрдВрдЪ (рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВ) рдХреЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВред
рдмрд╣реБрдд рдЧрд╣рд░рд╛рдИ рд╕реЗ рдиреЗрд╕реНрдЯреЗрдб рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЛ рд╕рдордЭрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдХрдИ рдиреЗрд╕реНрдЯреЗрдб рдЕрдирд┐рд╡рд╛рд░реНрдп рд╢рд╛рдЦрд╛рдУрдВ рдореЗрдВ рд╕реЗ рд╕рдмрд╕реЗ рдЦрд░рд╛рдм рд╣реИред
рдХреИрд╕реЗ рдирд╣реАрдВ рдХрд░рдирд╛ рд╣реИ рдЗрд╕рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг:
// wtf, ? let fx = let f2 y = let f3 z = x * z let f4 z = let f5 z = y * z let f6 () = y * x f6() f4 y x * f2 x
рдореЙрдбреНрдпреВрд▓
рдПрдХ рдореЙрдбреНрдпреВрд▓ рдХреЗрд╡рд▓ рдЙрди рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдПрдХ рд╕рдВрдЧреНрд░рд╣ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рдПрдХ рд╕рд╛рде рд╕рдореВрд╣реАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЖрдорддреМрд░ рдкрд░ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдПрдХ рд╣реА рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рдпрд╛ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред
рдПрдХ рдореЙрдбреНрдпреВрд▓ рдкрд░рд┐рднрд╛рд╖рд╛ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЗ рд╕рдорд╛рди рд╣реИред рдпрд╣ module
рдХреАрд╡рд░реНрдб рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рдлрд┐рд░ module
рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЗ рдмрд╛рдж =
рдЪрд┐рдиреНрд╣ рдЖрддрд╛ рд╣реИред
рдореЙрдбреНрдпреВрд▓ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдПрдХ рдСрдлрд╕реЗрдЯ рдХреЗ рд╕рд╛рде рд╕реНрд╡рд░реВрдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рд╕рд╛рде рд╣реА рдХрд╛рд░реНрдпреЛрдВ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдореЗрдВ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпрд╛рдВ рднреАред
рджреЛ рдХрд╛рд░реНрдпреЛрдВ рд╡рд╛рд▓реЗ рдПрдХ рдореЙрдбреНрдпреВрд▓ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛:
module MathStuff = let add xy = x + y let subtract xy = x - y
рдпрджрд┐ рдЖрдк Visual Studio рдореЗрдВ рдЗрд╕ рдХреЛрдб рдХреЛ рдЦреЛрд▓рддреЗ рд╣реИрдВ, рддреЛ рдЬрдм рдЖрдк add
рдУрд╡рд░ рдХрд░рддреЗ add
рддреЛ рдЖрдк рдкреВрд░рд╛ рдирд╛рдо add
рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ MathStuff.add
, рдЬреИрд╕реЗ рдХрд┐ MastStuff
рдПрдХ рдХреНрд▓рд╛рд╕ рдерд╛, рдФрд░ add
рдПрдХ рддрд░реАрдХрд╛ рдерд╛ред
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣реА рд╣реЛ рд░рд╣рд╛ рд╣реИред рдкрд░реНрджреЗ рдХреЗ рдкреАрдЫреЗ, рдПрдл # рд╕рдВрдХрд▓рдХ рд╕реНрдерд┐рд░ рддрд░реАрдХреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╕реНрдерд┐рд░ рд╡рд░реНрдЧ рдмрдирд╛рддрд╛ рд╣реИред C # рд╕рдорддреБрд▓реНрдп рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:
static class MathStuff { static public int add(int x, int y) { return x + y; } static public int subtract(int x, int y) { return x - y; } }
рдпрд╣ рдкрд╣рдЪрд╛рдирддреЗ рд╣реБрдП рдХрд┐ рдореЙрдбреНрдпреВрд▓ рдХреЗрд╡рд▓ рд╕реНрдерд┐рд░ рд╡рд░реНрдЧ рд╣реИрдВ рдФрд░ рдлрд╝рдВрдХреНрд╢рди рд╕реНрдерд┐рд░ рд╣реИрдВ рд╡рд┐рдзрд┐рдпрд╛рдБ F # рдореЗрдВ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреА рд╣реИрдВ, рдЗрд╕рдХреА рдЕрдЪреНрдЫреА рд╕рдордЭ рдкреНрд░рджрд╛рди рдХрд░реЗрдЧреА, рдХреНрдпреЛрдВрдХрд┐ рд╕реНрдереИрддрд┐рдХ рдХрдХреНрд╖рд╛рдУрдВ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдирд┐рдпрдо рдореЙрдбреНрдпреВрд▓ рдкрд░ рднреА рд▓рд╛рдЧреВ рд╣реЛрддреЗ рд╣реИрдВред
рдФрд░ рдЬрд┐рд╕ рддрд░рд╣ C # рдореЗрдВ, рдкреНрд░рддреНрдпреЗрдХ рд╕реНрдЯреИрдВрдб-рдЕрд▓реЛрди рдлрдВрдХреНрд╢рди рдХреНрд▓рд╛рд╕ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, F # рдореЗрдВ, рдкреНрд░рддреНрдпреЗрдХ рд╕реНрдЯреИрдВрдб-рдЕрд▓реЛрди рдлрдВрдХреНрд╢рди рдореЙрдбреНрдпреВрд▓ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдореЙрдбреНрдпреВрд▓ рдХреЗ рдмрд╛рд╣рд░ рдХрд╛рд░реНрдпреЛрдВ рддрдХ рдкрд╣реБрдВрдЪ
рдпрджрд┐ рдЖрдкрдХреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рдореЙрдбреНрдпреВрд▓ рд╕реЗ рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдПрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЖрдк рдЗрд╕реЗ рдЗрд╕рдХреЗ рдкреВрд░реНрдг рдирд╛рдо рд╕реЗ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
module MathStuff = let add xy = x + y let subtract xy = x - y module OtherStuff = // MathStuff let add1 x = MathStuff.add x 1
рдЖрдк open
рдирд┐рд░реНрджреЗрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рд╕реА рдЕрдиреНрдп рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рднреА рдЖрдпрд╛рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рдЖрдк рдкреВрд░реНрдг рдирд╛рдо рдХреЗ рдмрдЬрд╛рдп рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдирд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
module OtherStuff = open MathStuff // let add1 x = add x 1
рдирд╛рдореЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдирд┐рдпрдо рдХрд╛рдлреА рдЕрдкреЗрдХреНрд╖рд┐рдд рд╣реИрдВред рдЖрдк рд╣рдореЗрд╢рд╛ рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЙрд╕рдХреЗ рдкреВрд░реНрдг рдирд╛рдо рд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛ рдЖрдк рд╡рд░реНрддрдорд╛рди рджрд╛рдпрд░реЗ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕рд╛рдкреЗрдХреНрд╖ рдпрд╛ рдЕрдзреВрд░реЗ рдирд╛рдореЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдиреЗрд╕реНрдЯреЗрдб рдореЙрдбреНрдпреВрд▓
рд╕реНрдерд┐рд░ рд╡рд░реНрдЧреЛрдВ рдХреА рддрд░рд╣, рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдиреЗрд╕реНрдЯреЗрдб рдореЙрдбреНрдпреВрд▓ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ:
module MathStuff = let add xy = x + y let subtract xy = x - y // module FloatLib = let add xy :float = x + y let subtract xy :float = x - y
рдЕрдиреНрдп рдореЙрдбреНрдпреВрд▓ рдЙрдкрдпреБрдХреНрдд рдпрд╛ рдкреВрд░реНрдг рдирд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ рдиреЗрд╕реНрдЯреЗрдб рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
module OtherStuff = open MathStuff let add1 x = add x 1 // let add1Float x = MathStuff.FloatLib.add x 1.0 // let sub1Float x = FloatLib.subtract x 1.0
рд╢реАрд░реНрд╖ рд╕реНрддрд░ рдХреЗ рдореЙрдбреНрдпреВрд▓
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЪреВрдВрдХрд┐ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдиреЗрд╕реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП, рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рдКрдкрд░ рдЬрд╛рдХрд░, рдЖрдк рд╢реАрд░реНрд╖ рд╕реНрддрд░ рдХреЗ рдХреБрдЫ рдореВрд▓ рдореЙрдбреНрдпреВрд▓ рддрдХ рдкрд╣реБрдВрдЪ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣реИред
рд╢реАрд░реНрд╖-рд╕реНрддрд░ рдХреЗ рдореЙрдбреНрдпреВрд▓ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдЙрди рдореЙрдбреНрдпреВрд▓реЛрдВ рдХреЗ рд╡рд┐рдкрд░реАрдд рдЬреЛ рдкрд╣рд▓реЗ рджрд┐рдЦрд╛рдП рдЧрдП рдереЗред
module MyModuleName
рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдкрд╣рд▓реА рдШреЛрд╖рдгрд╛ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП- рдЪрд┐рдиреНрд╣
=
рдЧрд╛рдпрдм - рдореЙрдбреНрдпреВрд▓ рд╕рд╛рдордЧреНрд░реА рдХреЛ рдЗрдВрдбреЗрдВрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдкреНрд░рддреНрдпреЗрдХ рд╕реНрд░реЛрдд .FS
рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдПрдХ "рд╢реАрд░реНрд╖-рд╕реНрддрд░реАрдп" рдШреЛрд╖рдгрд╛ рдореМрдЬреВрдж рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рдХреБрдЫ рдЕрдкрд╡рд╛рдж рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрднреА рднреА рдЕрдЪреНрдЫрд╛ рдЕрднреНрдпрд╛рд╕ рд╣реИред рдореЙрдбреНрдпреВрд▓ рдирд╛рдо рдХреЛ рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рд╕реЗ рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рджреЛ рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рд╕рдорд╛рди рдирд╛рдо рд╡рд╛рд▓реЗ рдореЙрдбреНрдпреВрд▓ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред
.FSX
рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП, рдореЙрдбреНрдпреВрд▓ рдШреЛрд╖рдгрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдореЙрдбреНрдпреВрд▓ рдирд╛рдо рдмрди рдЬрд╛рддрд╛ рд╣реИред
рдПрдХ "рд╢реАрд░реНрд╖ рдореЙрдбреНрдпреВрд▓" рдореЙрдбреНрдпреВрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдШреЛрд╖рд┐рдд MathStuff
рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг:
// module MathStuff let add xy = x + y let subtract xy = x - y // module FloatLib = let add xy :float = x + y let subtract xy :float = x - y
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ "рд╢реАрд░реНрд╖-рд╕реНрддрд░реАрдп" рдХреЛрдб ( module MathStuff
) рдореЗрдВ рдХреЛрдИ рдЗрдВрдбреЗрдВрдЯреЗрд╢рди рдирд╣реАрдВ рд╣реИ, рдЬрдмрдХрд┐ рдиреЗрд╕реНрдЯреЗрдб FloatLib
рдореЙрдбреНрдпреВрд▓ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдЕрднреА рднреА рдЗрдВрдбреЗрдВрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рд╣реИред
рдЕрдиреНрдп рдореЙрдбреНрдпреВрд▓ рд╕рд╛рдордЧреНрд░реА
рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдЕрдиреНрдп рдШреЛрд╖рдгрд╛рдПрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛ рд╕рдХрддреА рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐ рдкреНрд░рдХрд╛рд░ рдХреА рдШреЛрд╖рдгрд╛рдПрдВ, рд╕рд░рд▓ рдореВрд▓реНрдп, рдФрд░ рдЖрд░рдВрднреАрдХрд░рдг рдХреЛрдб (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕реНрдереИрддрд┐рдХ рдирд┐рд░реНрдорд╛рдг)
module MathStuff = // let add xy = x + y let subtract xy = x - y // type Complex = {r:float; i:float} type IntegerFunction = int -> int -> int type DegreesOrRadians = Deg | Rad // "" let PI = 3.141 // "" let mutable TrigType = Deg // / do printfn "module initialized"
рд╡реИрд╕реЗ, рдпрджрд┐ рдЖрдк рдЗрди рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рдЕрдВрддрдГрдХреНрд░рд┐рдпрд╛рддреНрдордХ рд░реВрдк рд╕реЗ рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рд╕рддреНрд░ рдХреЛ рдЕрдХреНрд╕рд░ рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ рддрд╛рдХрд┐ рдХреЛрдб "рддрд╛рдЬрд╝рд╛" рдмрдирд╛ рд░рд╣реЗ рдФрд░ рдкрд┐рдЫрд▓реЗ рдЧрдгрдирд╛рдУрдВ рд╕реЗ рд╕рдВрдХреНрд░рдорд┐рдд рди рд╣реЛред
рдХрдВрд╕реАрд▓рд░реЗрд╢рди (рдУрд╡рд░рд▓реИрдкрд┐рдВрдЧ, рд╢реИрдбреЛрдЗрдВрдЧ)
рдпрд╣ рдлрд┐рд░ рд╕реЗ рд╣рдорд╛рд░рд╛ рдирдореВрдирд╛ рдореЙрдбреНрдпреВрд▓ рд╣реИред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ MathStuff
рдореЗрдВ add
рдлрдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде- рд╕рд╛рде FloatLib
ред
module MathStuff = let add xy = x + y let subtract xy = x - y // module FloatLib = let add xy :float = x + y let subtract xy :float = x - y
рдпрджрд┐ рдЖрдк рд╡рд░реНрддрдорд╛рди рджрд╛рдпрд░реЗ рдФрд░ рдХреЙрд▓ add
рдореЗрдВ рджреЛрдиреЛрдВ рдореЙрдбреНрдпреВрд▓ рдЦреЛрд▓рддреЗ рд╣реИрдВ рддреЛ рдХреНрдпрд╛ рд╣реЛрдЧрд╛?
open MathStuff open MathStuff.FloatLib let result = add 1 2 // Compiler error: This expression was expected to // have type float but here has type int
рдФрд░ рдРрд╕рд╛ рд╣реБрдЖ рдХрд┐ MathStuff.FloatLib
рдореЙрдбреНрдпреВрд▓ рдиреЗ рдореВрд▓ MathStuff
рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛, рдЬреЛ рдХрд┐ FloatLib
рдореЙрдбреНрдпреВрд▓ рджреНрд╡рд╛рд░рд╛ рдЕрд╡рд░реБрджреНрдз (рдЫрд┐рдкрд╛ рд╣реБрдЖ) рдерд╛ред
рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдореЗрдВ FS0001 рд╕рдВрдХрд▓рдХ рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдкрд╣рд▓реЗ рдкреИрд░рд╛рдореАрдЯрд░ 1
рдХреЛ рдлреНрд▓реЛрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдкреЗрдХреНрд╖рд┐рдд рдерд╛ред рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ 1
рд╕реЗ 1.0
рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛ред
рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдпрд╣ рд╡рд┐рд╡реЗрдХрдкреВрд░реНрдг рдФрд░ рдЖрд╕рд╛рдиреА рд╕реЗ рдЕрдирджреЗрдЦреА рд╣реИред рдХрднреА-рдХрднреА рдЗрд╕ рддрдХрдиреАрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрдк рджрд┐рд▓рдЪрд╕реНрдк рдЪрд╛рд▓реЗрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓рдЧрднрдЧ рдЙрдкрд╡рд░реНрдЧреЛрдВ рдХреА рддрд░рд╣, рд▓реЗрдХрд┐рди рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ рдПрдХ рд╣реА рдирд╛рдо рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХрд╖реНрдЯрдкреНрд░рдж рд╣реЛрддреА рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрддреНрдпрдВрдд рд╕рд╛рдорд╛рдиреНрдп map
рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ)ред
рдпрджрд┐ рдЖрдк рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рд╕реЗ рдмрдЪрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕реЗ RequireQualifiedAccess
рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд╕рд╛рде рд░реЛрдХрдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реИред рдПрдХ рд╣реА рдЙрджрд╛рд╣рд░рдг рдЬрд┐рд╕рдореЗрдВ рджреЛрдиреЛрдВ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдЗрд╕ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╕реЗ рд╕рдЬрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:
[<RequireQualifiedAccess>] module MathStuff = let add xy = x + y let subtract xy = x - y // [<RequireQualifiedAccess>] module FloatLib = let add xy :float = x + y let subtract xy :float = x - y
рдЕрдм open
рдирд┐рд░реНрджреЗрд╢ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИ:
open MathStuff // open MathStuff.FloatLib //
рд▓реЗрдХрд┐рди рдЖрдк рдЕрднреА рднреА рдлрд╝рдВрдХреНрд╢рди (рдмрд┐рдирд╛ рдХрд┐рд╕реА рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ рдХреЗ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдкрдиреЗ рдкреВрд░реНрдг рдирд╛рдореЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
let result = MathStuff.add 1 2 let result = MathStuff.FloatLib.add 1.0 2.0
рдЕрднрд┐рдЧрдо рдирд┐рдпрдВрддреНрд░рдг
рдПрдл # public
, private
рдФрд░ internal
рдЬреИрд╕реЗ рдорд╛рдирдХ .NET рдПрдХреНрд╕реЗрд╕ рдХрдВрдЯреНрд░реЛрд▓ рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред MSDN рдЖрд▓реЗрдЦ рдореЗрдВ рдкреВрд░реА рдЬрд╛рдирдХрд╛рд░реА рд╣реИред
- рдпреЗ рдПрдХреНрд╕реЗрд╕ рд╕реНрдкреЗрд╕рд┐рдлрд┐рдХреЗрд╢рдиреНрд╕ ("рд▓реЗрдЯ рдмрд╛рдЙрдВрдб") рдЯреЙрдк-рд▓реЗрд╡рд▓ рдлрд╝рдВрдХреНрд╢рдВрд╕, рд╡реИрд▓реНрдпреВрдЬрд╝, рдЯрд╛рдЗрдкреНрд╕ рдФрд░ рдЕрдиреНрдп рдШреЛрд╖рдгрд╛рдУрдВ рдХреЛ рдПрдХ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЙрдиреНрд╣реЗрдВ рд╕реНрд╡рдпрдВ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд▓рд┐рдП рднреА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдирд┐рдЬреА рдиреЗрд╕реНрдЯреЗрдб рдореЙрдбреНрдпреВрд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ)ред
- рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рд╕рдм рдХреБрдЫ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдкрд╣реБрдВрдЪ (рдХрдИ рдорд╛рдорд▓реЛрдВ рдХреЗ рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рд╛рде) рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ
private
рдпрд╛ internal
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред
рдпреЗ рдПрдХреНрд╕реЗрд╕ рд╕реНрдкреЗрд╕рд┐рдпрд░ рдПрдл # рдореЗрдВ рджреГрд╢реНрдпрддрд╛ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХрд╛ рд╕рд┐рд░реНрдл рдПрдХ рддрд░реАрдХрд╛ рд╣реИред рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рддрд░реАрдХрд╛ рд╣реИ рдЬреЛ рд╕реА рд╣реЗрдбрд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рд╕реЗ рдорд┐рд▓рддрд╛-рдЬреБрд▓рддрд╛ рд╣реИред рд╡реЗ рдореЙрдбреНрдпреВрд▓ рдХреА рд╕рд╛рдордЧреНрд░реА рдХрд╛ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВред рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдЧрдВрднреАрд░ рдЗрдирдХреИрдкреНрд╕реБрд▓реЗрд╢рди рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реЛрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЙрдирдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдХреНрд╖рдорддрд╛рдУрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдирдХреИрдкреНрд╕реБрд▓реЗрд╢рди рдФрд░ рд╕реБрд░рдХреНрд╖рд╛ рдкрд░ рдпреЛрдЬрдирд╛рдмрджреНрдз рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреА рд╣реЛрдЧреАред
рдирд╛рдорд╕реНрдерд╛рди
F # рдореЗрдВ рдирд╛рдо рд╕реНрдерд╛рди C # рд╕реЗ рдирд╛рдорд╕реНрдерд╛рди рдХреЗ рд╕рдорд╛рди рд╣реИрдВред рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдореЙрдбреНрдпреВрд▓ рдФрд░ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдирд╛рдо рд╕рдВрдШрд░реНрд╖ рд╕реЗ рдмрдЪрд╛ рдЬрд╛ рд╕рдХреЗред
namespace
рдХреАрд╡рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдШреЛрд╖рд┐рдд рдПрдХ рдирд╛рдорд╕реНрдерд╛рди:
namespace Utilities module MathStuff = // let add xy = x + y let subtract xy = x - y
рдЗрд╕ рдирд╛рдо рд╕реНрдерд╛рди рдХреЗ рдХрд╛рд░рдг, MathStuff
рдореЙрдбреНрдпреВрд▓ MathStuff
рдкреВрд░рд╛ рдирд╛рдо Utilities.MathStuff
рдмрди рдЧрдпрд╛ рд╣реИ, рдФрд░ рдкреВрд░рд╛ рдирд╛рдо add
рд▓рд┐рдП Utilities.MathStuff.add
ред
рд╕рдорд╛рди рдЗрдВрдбреЗрдВрдЯреЗрд╢рди рдирд┐рдпрдо рдПрдХ рдиреЗрдорд╕реНрдкреЗрд╕ рдХреЗ рднреАрддрд░ рдореЙрдбреНрдпреВрд▓ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддреЗ рд╣реИрдВ рдЬреЛ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд▓рд┐рдП рдКрдкрд░ рджрд┐рдЦрд╛рдП рдЧрдП рдереЗред
рдЖрдк рдореЙрдбреНрдпреВрд▓ рдирд╛рдо рдореЗрдВ рдПрдХ рдЕрд╡рдзрд┐ рдЬреЛрдбрд╝рдХрд░ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдПрдХ рдирд╛рдо рд╕реНрдерд╛рди рдХреА рдШреЛрд╖рдгрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╛рдиреА рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рдХреЛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
module Utilities.MathStuff // let add xy = x + y let subtract xy = x - y
MathStuff
рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдкреВрд░рд╛ рдирд╛рдо рдЕрднреА рднреА Utilities.MathStuff
рд╣реИред MathStuff
, рд▓реЗрдХрд┐рди рдЕрдм рдпрд╣ рдПрдХ рд╢реАрд░реНрд╖-рд╕реНрддрд░реАрдп рдореЙрдбреНрдпреВрд▓ рд╣реИ рдФрд░ рдЗрд╕рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдЗрдВрдбреЗрдВрдЯреЗрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
рдирд╛рдо рд╕реНрдерд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ:
- рдореЙрдбреНрдпреВрд▓ рдХреЗ рд▓рд┐рдП рдирд╛рдо рд╕реНрдерд╛рди рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реИрдВред C # рдХреЗ рд╡рд┐рдкрд░реАрдд, F # рдкреНрд░реЛрдЬреЗрдХреНрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдиреЗрдорд╕реНрдкреЗрд╕ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдмрд┐рдирд╛ рдирд╛рдо рдХреЗ рдЯреЙрдк-рд▓реЗрд╡рд▓ рдореЙрдбреНрдпреВрд▓ рдЧреНрд▓реЛрдмрд▓ рд╣реЛрдЧрд╛ред рдпрджрд┐ рдЖрдк рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдЕрдиреНрдп рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рдХреЛрдб рдХреЗ рд╕рд╛рде рд╕рдВрдШрд░реНрд╖ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рдирд╛рдорд╕реНрдерд╛рди рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ред
- рдирд╛рдо рд╕реНрдерд╛рди рдореЗрдВ рд╕реАрдзреЗ рдкреНрд░рдХрд╛рд░ рдХреА рдШреЛрд╖рдгрд╛рдПрдБ рд╣реЛ рд╕рдХрддреА рд╣реИрдВ, рд▓реЗрдХрд┐рди рдлрд╝рдВрдХреНрд╢рди рдХреА рдШреЛрд╖рдгрд╛рдПрдБ рдирд╣реАрдВред рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╕рднреА рдлрд╝рдВрдХреНрд╢рди рдФрд░ рдореВрд▓реНрдп рдШреЛрд╖рдгрд╛рдПрдВ рдПрдХ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред
- рдЕрдВрдд рдореЗрдВ, рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ рдирд╛рдорд╕реНрдерд╛рди рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЖрдк рдПрдХ рдирд╛рдо рд╕реНрдерд╛рди рдШреЛрд╖рдгрд╛рдПрдБ рднреЗрдЬрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐
namespace Utilities
, рдПрдХ рдЗрдВрдЯрд░реИрдХреНрдЯрд┐рд╡ рд╡рд┐рдВрдбреЛ рдореЗрдВ, рдПрдХ рддреНрд░реБрдЯрд┐ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреА рд╣реИред
рдирд╛рдорд╕реНрдерд╛рди рдкрджрд╛рдиреБрдХреНрд░рдо
рдЖрдк рдмрд╕ рдирд╛рдо рдХреЛ рдбреЙрдЯреНрд╕ рдХреЗ рд╕рд╛рде рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдХреЗ рдирд╛рдорд╕реНрдерд╛рдиреЛрдВ рдХрд╛ рдПрдХ рдкрджрд╛рдиреБрдХреНрд░рдо рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ:
namespace Core.Utilities module MathStuff = let add xy = x + y
рдЖрдк рдЪрд╛рд╣реЗрдВ рддреЛ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рджреЛ рдирд╛рдорд╕реНрдерд╛рди рднреА рдШреЛрд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╕рднреА рдирд╛рдорд╕реНрдерд╛рдиреЛрдВ рдХреЛ рдЙрдирдХреЗ рдкреВрд░реНрдг рдирд╛рдо рджреНрд╡рд╛рд░рд╛ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП - рд╡реЗ рдШреЛрдВрд╕рд▓реЗ рдХреЗ рд╢рд┐рдХрд╛рд░ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред
namespace Core.Utilities module MathStuff = let add xy = x + y namespace Core.Extra module MoreMathStuff = let add xy = x + y
рдирд╛рдо рд╕реНрдерд╛рди рдФрд░ рдореЙрдбреНрдпреВрд▓ рдХреЗ рдмреАрдЪ рдПрдХ рдирд╛рдо рд╕рдВрдШрд░реНрд╖ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИред
namespace Core.Utilities module MathStuff = let add xy = x + y namespace Core // - Core.Utilities // ! module Utilities = let add xy = x + y
рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдкреНрд░рдХрд╛рд░ рдФрд░ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдорд┐рд▓рд╛рдХрд░
рдЬреИрд╕рд╛ рдХрд┐ рд╣рдордиреЗ рджреЗрдЦрд╛ рд╣реИ, рдореЙрдбреНрдпреВрд▓ рдЖрдорддреМрд░ рдкрд░ рдХрдИ рдЕрдВрддрд░рдирд┐рд░реНрднрд░ рдХрд╛рд░реНрдпреЛрдВ рд╕реЗ рдорд┐рд▓рдХрд░ рдмрдирддрд╛ рд╣реИ рдЬреЛ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рддреЗ рд╣реИрдВред
OOP рдореЗрдВ, рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдПрдВ рдФрд░ рдЙрдирдХреЗ рдКрдкрд░ рдХреЗ рдХрд╛рд░реНрдп рдПрдХ рд╡рд░реНрдЧ рдХреЗ рднреАрддрд░ рдПрдХ рд╕рд╛рде рдЬреЛрдбрд╝ рджрд┐рдП рдЬрд╛рдПрдВрдЧреЗред рдФрд░ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдПрдл # рдореЗрдВ, рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдПрдВ рдФрд░ рдЙрдирдХреЗ рдКрдкрд░ рдХреЗ рдХрд╛рд░реНрдп рдПрдХ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рд╕рдВрдпреБрдХреНрдд рд╣реЛрддреЗ рд╣реИрдВред
рдкреНрд░рдХрд╛рд░ рдФрд░ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рдВрдпреЛрдЬрди рдХреЗ рд▓рд┐рдП рджреЛ рдкреИрдЯрд░реНрди рд╣реИрдВ:
- рдкреНрд░рдХрд╛рд░ рдХреЛ рдХрд╛рд░реНрдпреЛрдВ рд╕реЗ рдЕрд▓рдЧ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
- рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рд╣реА рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдкреНрд░рдХрд╛рд░ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
рдкрд╣рд▓реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдХрд┐рд╕реА рднреА рдореЙрдбреНрдпреВрд▓ (рд▓реЗрдХрд┐рди рдирд╛рдо рд╕реНрдерд╛рди рдореЗрдВ) рдХреЗ рдмрд╛рд╣рд░ рдкреНрд░рдХрд╛рд░ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЙрд╕реА рдкреНрд░рдХрд╛рд░ рдХреЗ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред
// namespace Example // type PersonType = {First:string; Last:string} // , module Person = // let create first last = {First=first; Last=last} // , let fullName {First=first; Last=last} = first + " " + last let person = Person.create "john" "doe" Person.fullName person |> printfn "Fullname=%s"
рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ, рдкреНрд░рдХрд╛рд░ рдХреЛ рдореЙрдбреНрдпреВрд▓ рдХреЗ рдЕрдВрджрд░ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХрд╛ рдПрдХ рд╕рд░рд▓ рдирд╛рдо рд╣реИ рдЬреИрд╕реЗ " T
" рдпрд╛ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдирд╛рдоред рдХрд╛рд░реНрдпреЛрдВ рдХреА рдкрд╣реБрдБрдЪ рд▓рдЧрднрдЧ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ: MyModule.Func
рдФрд░ MyModule.Func2
, рдФрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреА рдкрд╣реБрдБрдЪ: MyModule.T
:
module Customer = // Customer.T - type T = {AccountId:int; Name:string} // let create id name = {T.AccountId=id; T.Name=name} // , let isValid {T.AccountId=id; } = id > 0 let customer = Customer.create 42 "bob" Customer.isValid customer |> printfn "Is valid?=%b"
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рджреЛрдиреЛрдВ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдПрдХ рд░рдЪрдирд╛рдХрд╛рд░ рдлрд╝рдВрдХреНрд╢рди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдкреНрд░рдХрд╛рд░ (рдлрд╝реИрдХреНрдЯрд░реА) рдХрд╛ рдПрдХ рдирдпрд╛ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рддрд╛ рд╣реИред рдлрд┐рд░, рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛрдб рдореЗрдВ, рдЖрдкрдХреЛ рд╢рд╛рдпрдж рд╣реА рдЯрд╛рдЗрдк рдирд╛рдо рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдФрд░ рдЖрдкрдХреЛ рдЖрд╢реНрдЪрд░реНрдп рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдХрд┐ рдЯрд╛рдЗрдк рдореЙрдбреНрдпреВрд▓ рдХреЗ рдЕрдВрджрд░ рд╣реИ рдпрд╛ рдирд╣реАрдВред
рддреЛ рдХреМрди рд╕рд╛ рд░рд╛рд╕реНрддрд╛ рдЪреБрдирдирд╛ рд╣реИ?
- рдкрд╣рд▓рд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреНрд▓рд╛рд╕рд┐рдХ .NET рдХреА рддрд░рд╣ рдЕрдзрд┐рдХ рд╣реИ, рдФрд░ рдпрджрд┐ рдЖрдк F # рдХреЗ рдмрд╛рд╣рд░ рдХреЛрдб рдХреЗ рд▓рд┐рдП рдЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕реЗ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдП, рдЬрд╣рд╛рдВ рдПрдХ рдЕрд▓рдЧ рдореМрдЬреВрджрд╛ рд╡рд░реНрдЧ рдЕрдкреЗрдХреНрд╖рд┐рдд рд╣реИред
- рдЕрдиреНрдп рдХрд╛рд░реНрдпрд╛рддреНрдордХ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рджреВрд╕рд░рд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЕрдзрд┐рдХ рд╕рд╛рдорд╛рдиреНрдп рд╣реИред рдореЙрдбреНрдпреВрд▓ рдХреЗ рдЕрдВрджрд░ рдХрд╛ рдкреНрд░рдХрд╛рд░ рдПрдХ рдиреЗрд╕реНрдЯреЗрдб рдХреНрд▓рд╛рд╕ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдЖрдорддреМрд░ рдкрд░ рдУрдУрдкреА рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдирд╣реАрдВ рд╣реИред
рдЕрдкрдиреЗ рд▓рд┐рдП, рдЖрдк рджреЛрдиреЛрдВ рддрд░реАрдХреЛрдВ рд╕реЗ рдкреНрд░рдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЯреАрдо рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдПрдХ рд╢реИрд▓реА рдХреЛ рдЪреБрдирдирд╛ рд╣реЛрдЧрд╛ред
рдХреЗрд╡рд▓ рдкреНрд░рдХрд╛рд░ рд╡рд╛рд▓реЗ рдореЙрдбреНрдпреВрд▓
рдпрджрд┐ рдХрдИ рдкреНрд░рдХрд╛рд░ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдШреЛрд╖рд┐рдд рдХрд┐рдП рдЬрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд░реЗрд╢рд╛рди рди рдХрд░реЗрдВред рдЖрдк рдиреЗрд╕реНрдЯреЗрдб рдХрдХреНрд╖рд╛рдУрдВ рдХрд╛ рд╕рд╣рд╛рд░рд╛ рд▓рд┐рдП рдмрд┐рдирд╛ рд╕реАрдзреЗ рдирд╛рдорд╕реНрдерд╛рди рдореЗрдВ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рдРрд╕рд╛ рдХрд░рдирд╛ рдЪрд╛рд╣ рд╕рдХрддреЗ рд╣реИрдВ:
// module Example // type PersonType = {First:string; Last:string} // , ...
рдФрд░ рдпрд╣рд╛рдБ рднреА рдРрд╕рд╛ рд╣реА рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдФрд░ рддрд░реАрдХрд╛ рд╣реИред module
рд╢рдмреНрдж рдмрд╕ namespace
рд╕рд╛рде рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
// namespace Example // type PersonType = {First:string; Last:string}
рджреЛрдиреЛрдВ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, PersonType
рдХрд╛ рдкреВрд░рд╛ рдирд╛рдо рдПрдХ рд╣реА рд╣реЛрдЧрд╛ред
рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрд╣ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХреЗрд╡рд▓ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдореЙрдбреНрдпреВрд▓ рдХреЗ рдЕрдВрджрд░ рдлрдВрдХреНрд╢рдВрд╕ рдХреЛ рд╣рдореЗрд╢рд╛ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рдВрд╕рд╛рдзрди
F # рдХреЗ рд▓рд┐рдП рдХрдИ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рд╛рдордЧреНрд░реА рд╢рд╛рдорд┐рд▓ рд╣реИ рдЬреЛ C # рдпрд╛ Java рдЕрдиреБрднрд╡ рдХреЗ рд╕рд╛рде рдЖрддреЗ рд╣реИрдВред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓рд┐рдВрдХ рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдк F # рдореЗрдВ рдЧрд╣рд░рд╛рдИ рд╕реЗ рдЬрд╛рддреЗ рд╣реИрдВ:
F # рд╕реАрдЦрдирд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рдХрдИ рдЕрдиреНрдп рддрд░реАрдХреЗ рднреА рд╡рд░реНрдгрд┐рдд рд╣реИрдВред
рдЕрдВрдд рдореЗрдВ, рдПрдл # рд╕рдореБрджрд╛рдп рдмрд╣реБрдд рд╢реБрд░реБрдЖрддреА рдЕрдиреБрдХреВрд▓ рд╣реИред рд╕реНрд▓реИрдХ рдореЗрдВ рдПрдХ рдмрд╣реБрдд рд╕рдХреНрд░рд┐рдп рдЪреИрдЯ рд╣реИ, рдПрдл # рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдлрд╛рдЙрдВрдбреЗрд╢рди рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рд╣реИ, рд╢реБрд░реБрдЖрддреА рдХрдорд░реЛрдВ рдХреЗ рд╕рд╛рде рдЬреЛ рдЖрдк рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рд╢рд╛рдорд┐рд▓ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ ред рд╣рдо рджреГрдврд╝рддрд╛ рд╕реЗ рдЕрдиреБрд╢рдВрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЖрдк рдРрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ!
рд░реВрд╕реА рднрд╛рд╖реА рд╕рдореБрджрд╛рдп F # рдХреА рд╕рд╛рдЗрдЯ рдкрд░ рдЬрд╛рдирд╛ рди рднреВрд▓реЗрдВ! рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рднрд╛рд╖рд╛ рд╕реАрдЦрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рдкреНрд░рд╢реНрди рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдЙрдирд╕реЗ рдЪреИрдЯ рд░реВрдо рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХрд░рдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреА:
рдЕрдиреБрд╡рд╛рдж рд▓реЗрдЦрдХреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ
@Kleidemos рджреНрд╡рд╛рд░рд╛ рдЕрдиреБрд╡рд╛рджрд┐рдд
рдЕрдиреБрд╡рд╛рдж рдФрд░ рд╕рдВрдкрд╛рджрдХреАрдп рдкрд░рд┐рд╡рд░реНрддрди рдПрдл # рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд░реВрд╕реА рднрд╛рд╖реА рд╕рдореБрджрд╛рдп рдХреЗ рдкреНрд░рдпрд╛рд╕реЛрдВ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдП рдЧрдП рдереЗред рд╣рдо рдЗрд╕ рд▓реЗрдЦ рдХреЛ рдкреНрд░рдХрд╛рд╢рди рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП @schvepsss рдФрд░ @shwars рдХреЛ рднреА рдзрдиреНрдпрд╡рд╛рдж рджреЗрддреЗ рд╣реИрдВ ред