Вообще, я бы сделал с циклом REPEAT, не знаю, насколько это соответствовало бы эталонному решению, но REPEAT был бы кстати.
С одной стороны ASSERT можно выкинуть, так как WHILE уже охраняет. С другой стороны, ASSERT и WHILE можно заменить на IF In.done THEN REPEAT UNTIL !In.done END, с чтением не в начале цикла, а в конце, но тогда появляется лишняя первая итерация. Но это скорее борьба с нерегулярностью интерфейса модуля In.