Jinak je pravda, že jsem tomu zase tolik nedal... přeci jen, Erlang se mi zalouvá více... 
Hodnej hoch! Cim vic erlangistu, tim lepsi svet!

Nicmene mam pro tebe takovou pomucku, jak mozna to do notaci pochopis lip, hele, vubec to neni slozity:
Mas ucebnicovy priklad:
main = do
putStrLn "Hello, what's your name?"
name <- getLine
putStrLn ("Hey " ++ name ++ ", you rock!")
to "do" a "<-" je jenom syntaktickej cukr, ve skutecnosti je to zkratka pro tohle:
main =
(putStrLn "Hello, what's your name?") >>
(getLine >>= (\name -> putStrLn ("Hey " ++ name ++ ", you rock!")))
Vsimni si tam te lambdy "\name ->". Operator (>>=) dela to, ze rika "vystup prvni IO akce prived na vstup lambdy, ktera vraci druhou IO akci". A operator (>>) dela to same, akorat vystup prvni IO akce zahodi. Takze muzeme operator (>>) nahradit obecnejsim (>>=) a kod dal prevest na:
main =
(putStrLn "Hello, what's your name?") >>=
(\_ ->
getLine >>=
(\name -> putStrLn ("Hey " ++ name ++ ", you rock!"))
)
No a ted si musime jenom ujasnit, ze tenhle kod porad nic nevykonava, je to jenom staticky popis toho, jake akce by se mely provest, v jakem poradi a jaka si maji predavat data. Operator (>>=) pouziva ty divne monady:
Prelude> :t (>>=)
(>>=) :: Monad m => m a -> (a -> m b) -> m b
...takze se jich zbavime taky!
import GHC.Base (bindIO)
main =
bindIO
(putStrLn "Hello, what's your name?")
(\_ ->
bindIO
getLine
(\name -> putStrLn ("Hey " ++ name ++ ", you rock!"))
)
...funkce bindIO nedela nic jineho nez ze dva RECEPTY na IO (staticky popis IO akci) posklada za sebe, cimz vznikne nova IO akce zahrnujici ty dve:
Prelude GHC.Base> :t bindIO
bindIO :: IO a -> (a -> IO b) -> IO b
Jak vidis, abys delal IO v Haskellu, monady nepotrebujes. Postupovali jsme opacnym zpusobem, nez jde abstrakce: k razeni IO potrebujes otravne lambdy, takze je fajn si zavest operatory, ktere te od nich odstini. No a kdyz mas tohle, tak si jeste zavedes dalsi syntakticky cukr, ktery to jeste cely obali tak, aby to vypadalo jakoze imperativni programovani. Co to pripomina? No prece promises s JS! Protoze to jsou taky de facto monady. Akorat o tom nikdo nemluvi, nikdo z toho timpadem nema strach a vsichni to naprosto v klidu pouzivaji
