В основном: вы не можете. Батареи (и Extlib) обеспечивают расширенную оболочку ввода / вывода, но ни одна из них не поддерживает эту функцию.
Однако вы можете эмулировать его с помощью батарей или Extlib, если вы хотите выполнять только чтение на уровне символов, но обернуть поток ввода-вывода в Enum ( BatEnum с батареями). Enum предоставляет общее перечисление с интерфейсом типа «получить следующее значение» и позволяет перенести значения обратно в начало перечисления. Таким образом, вы можете заключить stdin в перечисление типа char Enum.t
, которое возвращает символы с его функцией Enum.next
, а затем использовать Enum.push
, чтобы перенести ненужные символы обратно в начало.
Может быть возможно затем переписать такое перечисление с IO ( BatIO ) для более гибкого интерфейса, если вы сначала убедились, что эти модули не выполняют внутренние буферизация, которая испортит семантику нажатия символов.