H
profession PL ✓ 50/100
Haskell Developer

Monada – w programowaniu funkcyjnym: rodzaj konstruktora abstrakcyjnego typu danych, który implementuje funkcje wiązania (ang. bind) oraz jednostki (ang. unit). Pojęcie to wywodzi się z teorii kategorii, gdzie omawiany abstrakt stanowi monadę nad kategorią typów z funkcjami jako morfizmami. Jednostka określa operację tworzenia singletonu czy też akcji, której wynikiem jest zadana wartość. Wiązanie

0
Mention Score
0
News Impact
50%
Trust Level
Monada – w programowaniu funkcyjnym: rodzaj konstruktora abstrakcyjnego typu danych, który implementuje funkcje wiązania (ang. bind) oraz jednostki (ang. unit). Pojęcie to wywodzi się z teorii kategorii, gdzie omawiany abstrakt stanowi monadę nad kategorią typów z funkcjami jako morfizmami. Jednostka określa operację tworzenia singletonu czy też akcji, której wynikiem jest zadana wartość. Wiązanie (w niektórych językach określane jako flat map) buduje na podstawie wyniku poprzedniego obliczenia nowe obliczenie, zachowując przy tym jego formę. Jedną z głównych cech monad jest to, że pozwalają wynieść pewne mechanizmy i zachowania do abstrakcji, zwalniając tym samym programistę z konieczności ręcznej obsługi kontekstu. Przykładowo, działając na (jakkolwiek zdefiniowanych) zbiorach można opisać jednostkę jako u n i t : A → P ( A ) {\displaystyle unit:A\to P(A)} u n i t ( x ) = { x } {\displaystyle unit(x)=\{x\}} oraz wiązanie jako b i n d : P ( A ) → ( A → P ( B ) ) → P ( B ) {\displaystyle bind:P(A)\to (A\to P(B))\to P(B)} b i n d ( s , f ) = ⋃ { f ( x ) | x ∈ s } {\displaystyle bind(s,f)=\bigcup \{f(x)|x\in s\}} by potem w sposób generyczny budować potoki danych w kompletnym oderwaniu od wewnętrznej implementacji czy nawet interpretacji. Dla przykładu konstruowanie iloczynu kartezjańskiego dwóch zbiorów mogłoby przebiegać tak: p r o d ( A , B ) = b i n d ( A , λ a → b i n d ( B , λ b → u n i t ( ⟨ a , b ⟩ ) ) ) . {\displaystyle prod(A,B)=bind(A,\lambda a\to bind(B,\lambda b\to unit(\langle a,b\rangle ))).} Istotne w tym przykładzie to, że przy definiowaniu operacji prod ani razu nie skorzystano z faktu, że nośnikiem danych jest matematyczny zbiór. Będzie ona zatem działać dla każdej monady, bez względu na jej wewnętrzną reprezentację. To podejście stanowi popularny wzorzec projektowy, który ma szerokie zastosowanie przy definiowaniu obliczeń zawierających dodatkowe reguły przetwarzające, jak chociażby transformowanie stanu, współbieżność, obsługę wejścia-wyjścia lub wyjątków. == Przykłady == === Haskell === W Haskellu monada jest klasą zrzeszającą typy o rodzaju ∗ → ∗ {\displaystyle *\to *} Operacje wiązania >> oraz >>= łączą ze sobą dwie wartości monadyczne, podczas gdy operacja return umieszcza wartość w monadzie. Operator >>= formuje wartość monadyczną obliczającą wynik typu b na podstawie wyniku lewego argumentu będącego wartością monadyczną z wynikiem typu a. Funkcja >> jest używana wtedy, gdy przebieg wiązania nie zależy od wyniku lewego argumentu, a jedynie od jego kontekstu. Haskell posiada syntaktyczne wsparcie monad przy użyciu tzw. notacji do: === Scala === W Scali monadą jest każda klasa, która implementuje operacje flatMap oraz unitOdpowiednikiem notacji do w Scali jest for comprehensions: == Przypisy ==
>_ Haskell Developer
profession // Entity_Profile

[DATA] Monada – w programowaniu funkcyjnym: rodzaj konstruktora abstrakcyjnego typu danych, który implementuje funkcje wiązania (ang. bind) oraz jednostki (ang. unit). Pojęcie to wywodzi się z teorii kategorii, gdzie omawiany abstrakt stanowi monadę nad kategorią typów z funkcjami jako morfizmami. Jednostka określa operację tworzenia singletonu czy też akcji, której wynikiem jest zadana wartość. Wiązanie

[METRICS] Encja posiada 0 wzmianek w bazie oraz 0 powiązanych artykułów. Trust Score: 50/100.

Wersja statyczna dla wyszukiwarek. Pełna wersja interaktywna z grafiką dostępna po włączeniu JavaScript.