Я столкнулся с проблемой при работе со структурой TextIO, потому что каждый вход Уэйтс для новой строки chacter и для буфера, чтобы быть полным ... Как могу я работать с BinIO и stdIn для решения этой проблемы?
BinIO
, как TextIO
, реализует буферном ввода/вывода. (Они оба реализуют подпись IMPERATIVE_IO
.) Для небуферизованный I/O, вам нужно перейти «вниз» на уровень абстракции и использовать реализацию PRIMITIVE_IO
или POSIX_IO
.
В частности, Posix.IO .readVec
позволяет вам читать небуферически из дескриптора файла. (В случае стандартного ввода файловый дескриптор равен Posix.FileSys .stdin
.)
Однако, если ваш стандартный ввод с консоли (в отличие от перенаправления из файла или взятия из трубы или чего-то еще), тогда есть очень хороший шанс, что консоль только вводит вход в MLton после того, как пользователь нажимает Enter. Использование Posix.IO
будет обходить функциональность буферизации линии, которую предоставляет MLton, но если вам также необходимо обойти буферизацию линии консоли, вам, скорее всего, придется использовать специальные библиотеки C (специфичные для вашей операционной системы), с интерфейсом внешних функций, который Мэтт упоминает в своем ответе.