Upravo to, monade Haskelasi zovu "programmable semicolon" jer implementacija samog monada odlucuje kako ce se bind izvrsiti, odnosno kako ce se i da li ce se slijedeca funkcija izvrsiti.
U slucaju Maybe tipa, koji ima ili vrijednost Just x (gdje je x neka vrijednost) ili Nothing, monadski bind sa pattern matchingom izgleda otprilike ovako:
f >>= Nothing = Nothing
f >>= (Just a) = Just (f a)
Dakle, ako bindamo instancu Maybea na neku funkciju, ovaj bind odlucuje sto ce se dogoditi. U slucaju da Maybe sadrzi Nothing, matcha se prvi pattern, funkcija se ne izvrsava i Nothing se jednostavno propagira dalje. U slucaju da Maybe sadrzi Just vrijednost, onda bind vraca novu Just vrijednost gdje se bindana funkcija aplicira na 'a'.
Super korisno, pogotovu ako se npr. umjesto Maybe koristi Either, koji je dvostruko tipiziran (odnosno nosi vrijednosti Left a i Right b, umjesto samo Just a i Nothing), a principijelno se koristi da bi propagirao gresku a ne samo nedostatak vrijednosti kao Maybe.
Vrlo slicno Maybeu, Either propagira Right (igrajuci se rijecima s cinjenicom da Right osim desno, znaci takodjer i i 'ispravno') aplicirajuci funkcije, dokle se Left samo propagira.
I ono najbitnije - monade za svoje tipove podataka implementiras sam, odnosno sam odlucujes kako ce se koji bind ponasati za koji konstruktor.
P.S.
Zanimljivo silovanje monada u Haskellu - tip je implementirao BASIC DSL Monad :-D
http://augustss.blogspot.ca/search/label/BASIC
Kako ja to zamisljam, njegov Basic data sadrzi state cijele BASIC masine, a svaki BASIC statement je monadska funkcija koja binda novo stanje na slijedecu funkciju.
Ono sto ne kuzim jest kako je sredio brojevne linije, ali kaze da su u pitanju ekstenzije compilera.