Article View: pl.comp.lang.funkcyjne
Article #352Re: >>=
From: Paweł 'Pasza' Ostrowski
Date: Thu, 29 May 2003 06:57
Date: Thu, 29 May 2003 06:57
49 lines
3123 bytes
3123 bytes
Dnia Thu, 29 May 2003 06:00:10 +0000 (UTC), Marcin Gajda napisał(a):
> Witam!
>
> Już drugi dzień ślęczę w Haskellu nad monadami i nic - głowa boli coraz
> bardziej.
Ty też? :), ja posiedziałem ostatnio ze dwa dni i trochę zacząłem
to czuć
> Czy może ktoś z Was ma jakąś intuicję dotyczącą samego pojęcia monady
> jak i operatora >>=? Tak na chłopski rozum ;)
Hmm - tak jak pisałem, sam dopiero zacząłem to czuć (przeczytałem
właśnie gentle introduction to haskell i jeszcze takie coś:
http://www.abercrombiegroup.co.uk/~noel/research/monads.html), więc
mogę trochę gadać głupoty - niech mnie ktoś w razie czego poprawi,
pójdę się wtedy douczać dalej.
Monada: polimorficzny typ (czyli sparametryzowany innym typem), np
data Maybe a = Just a | Nothing, na którym zdefiniowane są
operatory klasy Monad (czyli właśnie >>=, return, >>, może coś
jeszcze). Ważna jest chyba monada stanowa (koniecznie zobacz
przykłady w obu źródłach które podałem), rozwiązuje ona
problem stanu w programie funkcyjnym. Dzięki takiej
konstrukcji np. operacje wejścia/wyjścia, czy wogóle
jakiekolwiek ze skutkami ubocznymi mogą być funkcjami (czyli
zależeć tylko od swoich argumentów, a nie od środowiska),
ponieważ środowisko przekazujemy w jednym z parametrów. Tego
środowiska nie można wyciągnąć w żaden sposób boza monadę,
obliczenia na nim są zaszyte w kokretną definicję operatora
>>=.
>>= : typ jest taki :: M a -> (a -> M b) -> M b, czyli bierzemy monadę
opartą o typ a, wyciągamy z niej wartość (tego typu a) i
przekazujemy ją do funkcji, która na podstawie tego a da nam
monadę M b. Ta funkcja (a -> M b) służy przekazaniu wyniku
obliczenia z tej poprzedniej monady do następnej (można go użyć
w dalszych obliczeniach). Sam operator >>= (bind), według mojego
wyczucia, składa kolejne wyniki obliczenia, w końcu dostajemy
funkcję, która po zaaplikowaniu do wartości typu a pierwszego
typu (M a) da wynik przejścia przez wszystkie obliczenia zawinięty
w monadę M.
'Na chłopski rozum': złożenie wielu obliczeń w jedno duże
obliczenie.
--
Pasza
pasza (at) zodiac.mimuw.edu.pl
Technical Details
Message-ID:
<bb4b15$no1$1@pasza.io.waw.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!mimuw.edu.pl!news.mimuw.edu.pl!not-for-mailReferences:
<bb47la$o6t$1@kenny.mimuw.edu.pl>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!mimuw.edu.pl!news.mimuw.edu.pl!not-for-mail From: Paweł 'Pasza' Ostrowski <pasza@acn.waw.pl> Newsgroups: pl.comp.lang.funkcyjne Subject: Re: >>= Date: Thu, 29 May 2003 06:57:41 +0000 (UTC) Organization: independent Lines: 49 Message-ID: <bb4b15$no1$1@pasza.io.waw.pl> References: <bb47la$o6t$1@kenny.mimuw.edu.pl> NNTP-Posting-Host: zodiac.mimuw.edu.pl Mime-Version: 1.0 X-Trace: kenny.mimuw.edu.pl 1054191439 2199 10.1.1.1 (29 May 2003 06:57:19 GMT) X-Complaints-To: abuse@news.mimuw.edu.pl NNTP-Posting-Date: Thu, 29 May 2003 06:57:19 +0000 (UTC) User-Agent: slrn/0.9.7.4 (Linux) Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit