дело в том, что в файлах формата MS CFB есть собственная, можно сказать, файловая система (с директориями и файлами). файловая система в файле, в общем. чтобы прочитать файл (в этой ФС), нужно сначала загрузить таблицу FAT-секторов (цепочку секторов, т.е. какой сектор следует за каким), далее понять, какой сектор является начальным для файла в этой ФС, а потом последовательно прочитать сектора, соединив все части. в общем, изначально нет смысла читать все сектора (и с файлами всё понятно, можно использовать, как вы писали выше, hSeek
& hGet
)
со строкой я попробовал использовать splitAt
, но он в память загружается вся строка (ведь результат — кортеж с началом и хвостом), но это в любом случае неизбежно