S> В обычных языках есть выбор между иммутабельностью и мутабельностью.
В Haskell тоже есть. Можно сделать мутабельный контекст и внутри всё замутировать, а компилятором это будет рассматриваться как "чистая функция". Для этого и нужна do-конструкция.
конструкция
do
x <- a
b
раскрывается в
a >>= ( \x -> b )
выполняется действие a, результат которого сохраняется в некой переменной x, которая далее передается при помощи операции (»=), определенной для каждой конкретной монады, в последующие действия b.
см. также
Equal (=) Vs left arrow (<-) symbols in haskell
Нотация do
Lambda in Haskell
What does the >> symbol mean in Haskell
Where can I read up on the haskell "->" operator?
Нашел ещё
wiki-учебник