It may be worth having both around. If you wrap the stateless versions with something that keeps state, users get the choice of which one to use.
For example, you could use Tasks to create generators that produce the next value. The Task will keep the state for you, which allows you to keep your DSP code simple and stateless.
