Я пытаюсь написать небольшую программу Haskell, которая говорит о бинарном сетевом протоколе, и у меня есть удивительная сложность.
Кажется очевидным, что двоичные данные должны храниться как ByteString
.
Вопрос: Должен ли я просто hGet
/hPut
отдельные многобайтовые целые числа, или он более эффективен для создания большого ByteString
всего объекта и использования этого?
Кажется, что пакет binary
должен быть полезен здесь. Однако binary
имеет дело только с ленивыми значениями ByteString
.
Вопрос: действительно ли hGet
на ленивом ByteString
действительно читает указанное количество байтов? Или он пытается сделать какой-то ленивый ввод-вывод? (Я не хочу ленивого ввода-вывода!)
Вопрос: Почему в документации не указано это?
Код выглядит так, будто он будет содержать много "получить следующее целое число, сравнить его с этим значением, если нет, то выбросить ошибку, в противном случае перейти к следующему шагу..." Я не уверен, как чисто структуру, которая без написания кода спагетти.
В общем, то, что я пытаюсь сделать, довольно просто, но я, похоже, изо всех сил пытаюсь сделать код простым. Может быть, я просто передумал это и пропустил что-то очевидное...