все разновидности текстовых данных в Haskell? Инными словами, что из себя представляет к примеру формат Char, является ли это корневым форматом данных utf8 или что это вообще? Можно ли уйти с GHC куда то глубже?
я понимаю что дальше бита не уйдешь, но где начинается здравый смысл а не абстрактный анализ?
Type Char is an instance of the classes Read, Show, Eq, Ord, Enum, and Bounded. >является? >Да, является
https://hackage.haskell.org/package/base-4.16.0.0/docs/Data-Char.html - Char это code point, что бы это не значило. Строка - это односвязный список символов. Строгие байтовые строка и Text - это [указатели на] куски памяти. В случае байтстроки - с любым содержимым, в случае Text - с валидным текстом в кодировке UTF-8 UTF-16. Нестрогие байтстроки и нестрогий Text - это верёвки (rope) из своих строгих вариантов. Тип Char появляется только когда напрямую достать символ из байтстрок и текста. Или если работать с type String = [Char], который неэффективен по памяти и нелокален по кешу. Напрямую Char не хранится.
Можно до си-типов спуститься
вроде со следующей версии text будет поверх utf8
Будет, но надо дожить ещё
То есть из этого следует, что если ты указываешь Char в конструкторе, то компилятору надо дополнительно париться как его хранить, я правильно понимаю?
Если ты указываешь что угодно в конструкторе без (! или {-# language StrictData #-}) и директивы {-# UNPACK #-} - любое поле будет по ссылке и ленивое.
Рекомендую забить и заниматься оптимизациями строго после профилирования
типа сначала просто вояем newtype Stuff = Stuff String а потом думаем как ускорить?
Да. Только у newtype поле только одно может быть
пардон, спутал
Не, ну можно Text взять, методов у него полно
Ну между строкой и текстом лучше сразу текст брать, если ты не планируешь фьюзить обработку и использовать свой стафф в виде итератора по кодпоинтам
Хотя лейзи текст вроде бы тоже норм фьюзится
Обсуждают сегодня