This is precisely what activityOf (or the older simulationOf, which will soon be deprecated) are for. You provide an initial state, a function describing how the state changes as the program runs, and a function from state to a Picture.
main = activityOf initial change picture
initial = [1]
change (KeyPress _) (n:ns) = collatzF n : n : ns
change _ state = state
picture ns = ...
I used the KeyPress event here to take a step in each key press. You can also use Time passing to do it once per second. But in this case, your state will need to include not only the list of numbers, but also the time until the next change. You can even do both!
initial = (1, [1])
change (TimePassing dt) (t, ns)
| dt < t = (t - dt, ns)
| otherwise = (1, step ns)
change (KeyPress _) (_, ns) = (1, step ns)
change _ state = state
step (n:ns) = collatzF n : n : ns
Does that make sense?
Thanks for trying this. Hope you're having fun!