Marcin Malinowski
Pierwsza zasada klubu - monad się nie tłumaczy.
Druga zasada...
Zatem zamiast tłumaczyć, będziemy obserwować je w naturze (językach C# i F#).
Tata^2, mąż humanistki, mól książkowy, uparciuch, programista, konferencjoholik. Don Kichot walczący z entropią. Kocha sprzeczności i humor. Wierzy w przypadek. Piwny filozof. W nielicznych wolnych chwilach harata w gałę (na bramce).
Basic, Turbo Pascal/C, Assembler, Clipper, MS Access, Visual Basic, Java-XML :), C++, C#, JavaScript, F#... i ze wszystkiego miałem frajdę, ale nie za wszystkim tęsknię.
Absolwent informatyki i matematyki na UW. Ekspert IT w mBanku.
"Monady to byty duchowe nie mające charakteru czasowego ani przestrzennego"
Gottfried Wilhelm Leibniz
- zapytajmy ekspertaMonadic awareness is awakened through specific meditation practices.
"Monada jest rodzajem konstruktora abstrakcyjnego typu danych [...] Monady pozwalają programiście sprzęgać ze sobą kolejno wykonywane działania i budować potoki danych, w których każda akcja jest materializacją wzorca dekoratora z dodatkowymi regułami przetwarzającymi.
Formalnie monadę tworzy się definiując dwie operacje – wiązanie (ang. bind) i powrót (ang. return) [...]"
async jest instancją klasy AsyncBuilder:
type AsyncBuilder = class new AsyncBuilder : unit -> AsyncBuilder member this.Bind : Async<'T> * ('T -> Async<'U>) -> Async<'U> member this.Combine : Async<unit> * Async<'T> -> Async<'T> member this.Delay : (unit -> Async<'T>) -> Async<'T> member this.For : seq<'T> * ('T -> Async<unit>) -> Async<unit> member this.Return : 'T -> Async<'T> member this.ReturnFrom : Async<'T> -> Async<'T> member this.TryFinally : Async<'T> * (unit -> unit) -> Async<'T> member this.TryWith : Async<'T> * (exn -> Async<'T>) -> Async<'T> member this.Using : 'T * ('T -> Async<'U>) -> Async<'U> member this.While : (unit -> bool) * Async<unit> -> Async<unit> member this.Zero : unit -> Async<unit> end
Na szczęście, aby używać LINQ-a nie musimy znać w każdym szczególe implementacji LINQ Providera - to samo dotyczy async i innych workflowów w F#.
...ale to nie znaczy, że nie możemy stworzyć naprawdę użytecznych monad w C#!
Ankieta: https://www.surveymonkey.com/r/G2FW295 Pls!