set_random_seed is not a good abstraction
Because if you have primitives passed as an argument to a primitive, then setting a seed on the main primitive should not set it also on argument primitive.
Maybe the issue is only with current default implementation changes seed globally, for all calls to other primitives as well. Ideally, you would create a primitive, call set_random_seed once and it would be set only for this particular primitive from then on and all internal calls related to this primitive would be based on that seed, but some other primitive would keep its own seed.