I have never used PureScript, but the short answer is yes, effect labels are useful for modeling effects in a principled way.
I'm not sure what your background is, so I don't know at what level to answer the question. Are you familiar with side effects, the downsides of their unrestricted use, functional programming, and why we try to avoid side effects in FP? If so, that provides a good motivation for effects systems, which make it possible to use effects without allowing their unrestricted use; in statically-typed languages, it is even possible to explicitly track effects in the type system. One popular effects system is monad transformers (of course they are not without drawbacks -- but they have already been implemented in popular languages and are therefore easy to get started experimenting with).
If you understand all of that, then perhaps your question is simply why would one need/want multiple separate instances of the same effect? Pseudo-random number generators don't generate random numbers, and the relationships between the generated numbers aren't random -- so with two (or more) separate random effects, you can essentially have two (or more) uncorrelated pseudo-random number streams.
Disclaimer: I have never used PureScript -- this is just my opinion!
Why would one need/want multiple separate instances of the same effect? Pseudo-random number generators don't generate random numbers, and the relationships between the generated numbers aren't random -- so with two (or more) separate random effects, you can essentially have two (or more) uncorrelated pseudo-random number streams.
Another benefit of using names -- even when there's no more than a single instance of any given effect -- is that some semantic meaning can be attached to the effects through a meaningful label. In other words, not all
States are created equal!
Another example of using multiple instances of the same effect, check out parser combinators. These are easy to build from effects systems such as monad transformers. A simple backtracking, error-reporting parser could be built out of the:
- State -- handles the input string
- Error -- error-reporting
- Maybe -- backtracking
effects (sorry, that's Haskell terminology -- I don't know how those map to PureScript's effects). If you wanted to also track the position (line, column) while parsing, you could add a second State effect. You could also track global variable declarations using a third State effect (assuming you're parsing a programming language). While in principle you could combine all three State effects into a single one, that would introduce coupling and be less extensible; having them separate avoids this coupling.