Monada (programowanie)

Z Wikipedii, wolnej encyklopedii
Skocz do: nawigacji, wyszukiwania

W programowaniu funkcyjnym, monada jest rodzajem konstruktora abstrakcyjnego typu danych, używanego do wyrażania zmieniających się stanów obliczeń (operacji) zamiast znanych z modelu dziedzinowego zmieniających się stanów 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. Programy pisane w stylu funkcyjnym mogą korzystać z monad do strukturalizowania procedur zawierających operacje wykonywane sekwencyjnie, albo definiować pewne wymagane przepływy sterowania (takie jak współbieżność, kontynuacje, efekty uboczne tj. obsługa I/O lub wyjątki).

Formalnie monadę tworzy się definiując dwie operacje – wiązanie (ang. bind) i powrót (ang. return)[potrzebne źródło] – oraz określając konstruktor typu M, który musi mieć kilka specyficznych właściwości, pozwalających na prawidłowe sformułowanie funkcji monadycznych; na przykład funkcje takie jako argumentów używają wartości zwracanych przez monady. Operacja powrotu przyjmuje wartość zwykłego typu i umieszcza się ją w kontenerze monadycznym typu M. Z kolei operacja wiązania to odwrócenie tego procesu – wyłuskanie oryginalnej wartości z kontenera i przekazanie jej do następnej funkcji występującej w łańcuchu sekwencyjnym.

Przykłady[edytuj | edytuj kod]

Monady są wykorzystywane w aplikacjach pisanych w językach programowania funkcyjnego.

Haskell[edytuj | edytuj kod]

class Monad m where
  (>>=) :: m a -> (a -> m b) -> m b
  (>>) :: m a -> m b -> m b
  return :: a -> m a
  fail :: String -> m a