This can arise when you have different threads. But it’s of prime importance in a lazy language like Haskell, since it makes it possible to generate deterministic random numbers lazily. For instance, split is used in QuickCheck’s Gen monad. An easy implementation of split is to duplicate the current state. But, the two parallel sequences will not be independent: indeed they will be identical. A sl