Do-notation is Haskell is purely syntactic sugar over function calls. You can remove do-notation from Haskell and still write the exact same programs (with monads and all).
Also, monads are not about state anymore than classes in Java are about Toasters.