Как сказал Хаммар, двоичный файл (и строгая версия с тестируемой строкой - зерновой) - это здорово, но они заметно медленнее, чем самые быстрые решения (они выполняют то же смещение, что и в предложении Хаммара).
Я имеюобнаружил, что простая подпрограмма FFI является самым быстрым решением:
getNthWord n b = inlinePerformIO (unsafeUseAsCString b (flip peekElemOff n . castPtr))
Если вы хотите добавить build-dep, столь же быстрое решение - использовать Vector.Storable
из векторного пакета.
Обратите внимание, что ни один из них не обрабатывает ваш 5-байтовый формат с прямым порядком байтов, поэтому вам необходимо изменить источник данных, чтобы это было полезно.
PS Решение FFI предполагает выравнивание слов.Первоначально у меня была ошибка, когда пользователи запускали эту процедуру в системах, отличных от x86.