let iter_stop (apply: 'data -> unit) (stop: 'data -> bool) (stack: 'data stack) : unit =
  try
    for i = 0 to stack.size - 1 do
      if stop stack.stack.(i) then
        raise Exit
      else
        apply stack.stack.(i)
    done
  with
    | Exit ->
        ()