Предположим, очередь представлена одним неизменяемым списком OCaml, а каждое обновление возвращает новую очередь. Вызывающий код многократно проверяет List.length items > 8. Мы выбираем между хранением точного количества и отдельной операцией проверки порога.
В (items, count) образец пары даёт имена двум компонентам. Инвариант count = List.length items должен сохраняться при каждом обновлении. Добавление увеличивает счётчик на один, успешное извлечение уменьшает на один, а попытка извлечь элемент из пустой очереди оставляет ноль. Любая функция создания очереди, принимающая оба компонента, тоже должна сохранять их связь.
Нынешний вопрос прямо выражается как List.compare_length_with items 8 > 0. Согласно документации OCaml 5.4, это сравнение может остановиться, выполнив не более заданного числа итераций.
Вы бы сейчас добавили поле со счётчиком или сохранили представление и дали операции проверки порога короткое публичное имя?