stref si můžete nastudovat sám
Prvně bych musel vědět, v čem se mýlím, abych věděl, co tam mám hledat. Zatím se mi to jeví jako obdoba
http://elixir-lang.org/docs/stable/elixir/Agent.html#update/3 - s tím rozdílem, že v Haskellu je to lazy, takže pokud dlouho píšu a nečtu, tak se ty lambdy kupí a přeteče zásobník.
a argument s bindio je asi jako říct, že nepotřebujete městskou hromadnou dopravu, protože se můžete svézt tramvají (viz haskell 2010 report a implementace instance Monad IO v ghc)
Mám obavu, že ten argument nechápete. Prostě IO v Haskellu je totéž, jako by to byl string "načti_ze_stdio", "zapiš_do_souboru", ... a tyhle statické, symbolické popisy IO akcí by se řadily za sebe třeba do Listu. Monády jsou to samé, akorát mi umožňují předávat mezi IO akcemi libovolná data a checkovat jejich typy. Nic víc, jenom prostě řazení IO operací. Plus možnost failnout. A bindIO dělá to samé, akorát ne obecně pro jakoukoli monádu, ale jenom specificky pro IO akce. Takže (>>=) není nic jiného než zobecnění bindIO na jakoukoli monádu. (EDIT: z čehož právě plyne, že když specifikace obsahuje Monad, tak nepotřebuje explicitní bindIO, může ho schovat v implementaci, což je přesně to, co jsem řekl a nevidím tam nic nepravdivého)