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