do-notation is just syntax in theory but in practice it's difficult to avoid it. Try to write any OpenGL program in terms of `>>=`, `>>` and `return`. I don't like to use `do` knowing that it's just syntax sugar but sometimes it help a lot.