🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.funkcyjne
Article #352

Re: >>=

#352
From: Paweł 'Pasza' Ostrowski
Date: Thu, 29 May 2003 06:57
49 lines
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-mail
References: <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