Внутренние структуры данных в Haskell (текст)

Итак, я анализирую некоторый JSON в пользовательский тип данных с помощью aeson, и я не могу понять, почему Haskell нужно иметь два представления определенных типов в библиотеке. В моем случае это все связано с текстом.

Например:

Couldn't match expected type `Data.ByteString.Internal.ByteString'
with actual type `B.ByteString'.

Эм, что? Чем эти двое не одинаковы? Почему Data.ByteString.ByteString и Data.ByteString.Internal.ByteString? Я не понимаю, почему эти два являются двумя разными типами и почему мне нужно конвертировать их между собой.

Есть ли где-нибудь руководство, посвященное использованию ByteStrings? Я понимаю, что они намного эффективнее, чем String, если вы имеете дело только с ASCII.


person Honza Pokorny    schedule 14.06.2014    source источник


Ответы (2)


Data.ByteString.ByteString — это просто реэкспорт Data.ByteString.Internal.ByteString, поэтому типы идентичны. Однако строгие и ленивые строки байтов - это разные типы, поэтому я подозреваю, что проблема, с которой вы столкнулись, вызвана тем, что B.ByteString на самом деле является Data.ByteString.Lazy.ByteString.

Если это не поможет, пожалуйста, предоставьте больше контекста.

Bytestring действительно является наиболее эффективным типом для хранения ASCII. Вот руководство в строке байтов. String очень неэффективен для большинства случаев использования, Text является предпочтительной альтернативой для Unicode.

person Nikita Volkov    schedule 14.06.2014

Data.ByteString.Internal.ByteString имеет тот же тип, что и Data.ByteString.ByteString. Я готов поспорить на большую сумму денег, чем у меня есть, что B на самом деле является импортом Data.ByteString.Lazy.

Так что ошибка на самом деле в том, что вы смешиваете Data.ByteString.ByteString с Data.ByteString.Lazy.ByteString. Тот факт, что .Internal проникает туда, является артефактом отсутствия инструментов, позволяющих сообщить GHC о модуле, отличном от того, который определил тип как каноническое местоположение этого типа в сообщениях об ошибках.

person Carl    schedule 14.06.2014
comment
... и вы бы не проиграли эту ставку :) - person Honza Pokorny; 15.06.2014