Reakce na to, jak měly OCaml a F# nakročeno. Ty jazyky nejsou mrtvé. O OCaml se starají v Jane Street a řekl bych, že do toho docela investují, takže nějaká vylepšení v typovém systému by být mohla. A F# sice nemá takovej "drive" jako na začátku, ale taky to není jen v udržovacím režimu.
Třeba do OCamlu 4 se přidal GADT, do 4.02 "generative functors" (to as nemá český ekvivalent) a tak.
Tady příklad FBIP (jen tak z plezíru):
structure Person : Type where firstName : String lastName : String instance : ToString Person where toString p := s!"{p.firstName} {p.lastName}" def main : IO Unit := do let mut arr := #[ Person.mk "Jack" "Sparrow", Person.mk "Will" "Turner" ] IO.println s!"{arr}" let some p := arr.get? 0 | IO.println "index out of bounds" arr := arr.set! 0 { firstName := "Elizabeth", lastName := "Swann" } IO.println s!"{arr}" let p := {p with firstName := "John" } IO.println s!"{p}"
Předpokládám, že jsi myslel Toolz a dekorátot @curry. Chvilku mi trvalo to najít. Tak kdyby to taky někoho zajímalo: https://toolz.readthedocs.io/en/latest/curry.html
A načo nám to vlastne je? Ja by som to nepochopil, kebyže sa nestretnem s F#. V Pythone to vôbec nevynikne. Nejaký zložitý kód, ktorý neviem na čo mi bude.
V podstate, currying a parciálne funkcie nám umožňujú nasledujúci kód.
[9;-2;-3;-5;5;-8;4;3;0;-4] |> Seq.map(fun e -> e * 2) |> Seq.map ((+) 1) |> Seq.filter (fun e -> e > 0) |> Seq.sortDescending |> Seq.iter (printfn "%d")
Operátorom |> posielame výsledok spracovania do ďalšej funkcie.
let f1 = List.map ((+) 1) let f2 = List.filter (fun e -> e >= 0) let compose = f1 >> f2 let res = compose [-5..5] printfn "%A" res
Operátorom >> vytvárame kompozitné funkcie.
Čož je mimoriadne elegantné a flexibilné.
Možností je naozaj veľa:
open System let add x y = x + y add 5 <| 10 |> Console.WriteLine (add 5) 10 |> Console.WriteLine (add 5) <| 10 |> Console.WriteLine add <| 5 <| 10 |> Console.WriteLine add 5 10 |> Console.WriteLine 5 |> add <| 10 |> Console.WriteLine Console.WriteLine(add 10 5) Console.WriteLine((add 10) 5) Console.WriteLine((add 10) <| 5) Console.WriteLine((add <| 10 <| 5))
3. 8. 2023, 21:31 editováno autorem komentáře