It depends on your interpretation, I guess.
Is an Iterator
interface a unification of arrays, lists, sets, strings, and input streams?
Because that is essentially what a monad is: an interface. It is just at a higher level of abstraction than the typical interfaces programmers are used to.
Monads are an abstraction that essentially represents "computation plus some structure". And it turns out that, indeed, many concepts in computer science can be molded into the form of a monad. The IO
monad represents side-effecting computations, the State
monad represents computations with mutable state, the STM
monad represents concurrent computations with transactional state, the Error
monad represents computations that could fail, the Maybe
monad represents computations that may or may not return a useful result, the Continuation
monad represents control flow, the List
monad represents … and so on and so forth.
For example, in .NET, monads are used to abstract over database queries, collections operations, reactive programming, and many more. And of course in Haskell, you can't really write a useful program without at least the IO
monad.
What this means is that monads allow you to interact with non-determinism, concurrency, side-effects, errors, etc. through the same interface. Which of course also means that you can write libraries, helpers, programs, and abstractions that only depend on the monad interface and thus automatically work with all of those.
Whether or not you consider that "unification" is probably more a matter of opinion. Like I said: if you say that monads unify all these things, then you also need to say that iterators unify arrays, lists, etc.