[Haskell] monady

0

Witam.
Uczę się haskell'a i natknąłem się na coś czego nie rozumiem do końca. Mianowicie są to monady. Monady umożliwiają bezproblemowe operacje we - wy ale są też inne służące do czegoś innego (logowanie, czytanie, wyjątki). TO tam znalazłęm:
http://en.wikibooks.org/wiki/Haskell/Understanding_monads
Czyli wciąż raczej nie rozumiem do czego służą monady. Wnioskuję że jest zbiór jakichś konkretnych funkcji.
Proszę o przybliżenie mi problemu. Może ktoś doda coś od siebie (jakąś łątwą definicję, ciekawy przykład).
Pozdrawiam

1

http://stackoverflow.com/questions/2704652/monad-in-plain-english-for-the-oop-programmer-with-no-fp-background
Monady w ujęciu programowania funkcyjnego w C# (nie mogło być inaczej, bo odpowiadał Eric Lippert), ale ogólne pojęcie będzie te same.

4

Primo: polecam kurs http://learnyouahaskell.com/

Secundo: Zarówno na LYAH jak i np na http://www.haskell.org/haskellwiki/All_about_monads masz przykłady wielu rodzajów monad. Dla przykładu najprostsza monada Maybe wraz z notacją do pozwala na uniknięcie wielu sprawdzeń czy coś jest nullem.

Przykład z LYAH:

-- wersja monadyczna z notacją do
routine :: Maybe Pole  
routine = do  
    start <- return (0,0)  
    first <- landLeft 2 start  
    second <- landRight 2 first  
    landLeft 1 second  

-- wersja niemonadyczna
routine :: Maybe Pole  
routine =   
    case Just (0,0) of   
        Nothing -> Nothing  
        Just start -> case landLeft 2 start of  
            Nothing -> Nothing  
            Just first -> case landRight 2 first of  
                Nothing -> Nothing  
                Just second -> landLeft 1 second  

Tertio: to już jako ciekawostka - for-comprehension w Scali to coś bardzo podobnego do do-notation z Haskella - też operuje na monadach (i np kolekcje w Scali są monadami).

1 użytkowników online, w tym zalogowanych: 0, gości: 1