Mám na to vlastní třídu/y s přetíženým operátorem (můžeř zkusit >> nebo |). Takový monadická `lift` komedie. Inspiruj se tady: https://github.com/JulienPalard/Pipe. Viděl sem už různé implementace v různých projektech, ale tohle je nejjednodušší případně ohnout na vlastní potřeby.
Ne to není můj repozitář. Ale dělal sem si rešerši a dostal se na několik implementací pipelines, které používají tuto knihovnu nebo implementují to samé trochu jinak. S těmi pipelines se dostaneš na to, že potřebuješ řešit error handling -- a to tě svede na monády a dál do králičí nory. Nakonec jsem si prostě implementoval svoje věci, tak jak mi to umožňuje moje IQ a čas, ale chlubit se tim radši zatím nebudu :D
Tady ještě tohle mi bylo inspirací: https://github.com/shwars/mPyPl
V F#, s 'nejakým tým' operátorom. :)
let msg = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua" msg.Split() |> Array.filter (fun e -> e.Length > 4) |> printfn "%A"
Pre mňa je to top vlastností ML jazykov.
Bolo by zaujímavé zistiť, ktorý jazyk s tým prišiel ako prvý. Je pravdepodobné, že to bol niektorý z ML jazykov.
Pre zaujímavosť, Raku má feed operátor ==>:
my @array = (1, 2, 3, 4, 5); @array ==> sum() ==> say(); <people cup of mop a earth sum talk bye buy car lot pot smell falcon> ==> grep /^...$/ ==> sort() ==> map({ .tc }) ==> say();
Už spomínaný Clojure thread operátor:
(ns basics.core) (defn -main [] (println (reduce + (map (fn [x] (* x x)) (filter odd? (range 10))))) (println (->> (range 10) (filter odd?) (map (fn [x] (* x x))) (reduce +))))
Obe sú fajn, ale vizuálne je |> pre mňa najlepšie. Určite nie je náhoda, že Elixir si tento operátor prebral práve z F# a možno aj R.