[Haskell] monady

AN
  • Rejestracja:prawie 13 lat
  • Ostatnio:ponad 12 lat
  • Postów:11
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

RE
Moderator
  • Rejestracja:około 18 lat
  • Ostatnio:około rok
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.

Wibowit
  • Rejestracja:około 20 lat
  • Ostatnio:29 minut
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:

Kopiuj
-- 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).


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.
msm
Learnyouhaskell jest niezłe i bardzo przystępne, ale nie omawia bardziej skomplikowanych rzeczy. Po przeczytaniu/kupieniu tego, można się zainteresować http://book.realworldhaskell.org/ (czytałem tam tylko trzy rozdziały, ale wszystkie były nieźle napisane)
Wibowit
Jak na razie i tak funkcyjnie nie piszę, więc szybko bym zapomniał detale. RWH też znalazłem w Google :P
OA
Jest też kurs haskella na youtube. http://www.youtube.com/watch?v=I1zhPHBiVBk&amp;feature=BFa&amp;list=PL395B50FC04752DA8 nie jest za dokładny, ale zawsze można posłuchać. ;)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.