Основной ответ дан, используйте ByteString, это правильно. Тем не менее, все три ответа перед моим имеют неточности.
Относительно UTF-8: будет ли это проблемой или нет, полностью зависит от того, какую обработку вы выполняете со своими строками. Если вы просто обрабатываете их как отдельные порции данных (которые включают в себя такие операции, как конкатенация, но не разбиение), или выполняете определенные ограниченные байтовые операции (например, находите длину строки в байтах, а не длину в персонажи), у вас не будет никаких проблем. Если вы используете I18N, есть достаточно других проблем, которые просто с помощью String
вместо ByteString
начнут исправлять только очень немногие из проблем, с которыми вы столкнетесь.
Предварительное добавление отдельных байтов к началу ByteString, вероятно, более затратно, чем выполнение того же для строки. Однако, если вы делаете это много, возможно, можно найти способы решения вашей конкретной проблемы, которые дешевле.
Но конечный результат был бы для автора оригинального вопроса: да, Строки неэффективны в Haskell, хотя и довольно удобны. Если вы беспокоитесь об эффективности, используйте ByteStrings и рассматривайте их как массивы Char8 или Word8, в зависимости от вашей цели (ASCII / ISO-8859-1 по сравнению с Unicode некоторого вида или просто произвольные двоичные данные). Как правило, используйте Lazy ByteStrings (где добавление к началу строки на самом деле является очень быстрой операцией), если вы не знаете, почему вам нужны не ленивые (которые обычно заключаются в оценке аспектов производительности ленивых вычислений).
Для чего я стою, я строю автоматизированную торговую систему полностью на Haskell, и одна из вещей, которые нам нужно сделать, - это очень быстро проанализировать поток рыночных данных, который мы получаем по сетевому соединению. Я могу справиться с чтением и анализом 300 сообщений в секунду с незначительным объемом процессора; Что касается обработки этих данных, скомпилированный GHC Haskell работает достаточно близко к C, так что он не приблизится к моему списку заметных проблем.