Po podpisie operatora >> = Monad

To jest podpis dobrze znanego operatora >> w Haskell

>>= :: Monad m => m a -> (a -> m b) -> m b

Pytanie brzmi, dlaczego typ funkcji jest

(a -> m b)

zamiast

(a -> b)

Powiedziałbym, że ten drugi jest bardziej praktyczny, ponieważ umożliwia bezpośrednią integrację istniejących „czystych” funkcji w definiowanej monadzie.

Wręcz przeciwnie, trudno jest napisać ogólny „adapter”

adapt :: (Monad m) => (a -> b) -> (a -> m b)

ale w każdym razie uważam, że bardziej prawdopodobne, że już masz(a -> b) zamiast(a -> m b).

Uwaga. Wyjaśniam, co rozumiem przez „praktyczny” i „prawdopodobny”. Jeśli jeszcze nie zdefiniowałeś żadnej monady w programie, funkcje, które posiadasz, są „czyste”(a -> b) i będziesz miał 0 funkcji tego typu(a -> m b) tylko dlatego, że jeszcze nie zdefiniowałeśm. Jeśli więc zdecydujesz się zdefiniować monadęm przychodzi potrzeba posiadania nowegoa -> m b zdefiniowane funkcje.

questionAnswers(5)

yourAnswerToTheQuestion