169 похожих чатов

Коллеги, помогите разобраться в одном вопросе. На какой тип данных опираются

все разновидности текстовых данных в Haskell? Инными словами, что из себя представляет к примеру формат Char, является ли это корневым форматом данных utf8 или что это вообще? Можно ли уйти с GHC куда то глубже?

я понимаю что дальше бита не уйдешь, но где начинается здравый смысл а не абстрактный анализ?

17 ответов

9 просмотров

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 не хранится.

Можно до си-типов спуститься

TOV_MULTIMASSO
https://hackage.haskell.org/package/base-4.16.0.0/...

вроде со следующей версии text будет поверх utf8

Ivan-Kretov Автор вопроса
TOV_MULTIMASSO
https://hackage.haskell.org/package/base-4.16.0.0/...

То есть из этого следует, что если ты указываешь Char в конструкторе, то компилятору надо дополнительно париться как его хранить, я правильно понимаю?

Ivan Kretov
То есть из этого следует, что если ты указываешь C...

Если ты указываешь что угодно в конструкторе без (! или {-# language StrictData #-}) и директивы {-# UNPACK #-} - любое поле будет по ссылке и ленивое.

Ivan Kretov
спасибо

Рекомендую забить и заниматься оптимизациями строго после профилирования

Ivan-Kretov Автор вопроса
TOV_MULTIMASSO
Рекомендую забить и заниматься оптимизациями строг...

типа сначала просто вояем newtype Stuff = Stuff String а потом думаем как ускорить?

Ivan Kretov
типа сначала просто вояем newtype Stuff = Stuff St...

Да. Только у newtype поле только одно может быть

Ivan-Kretov Автор вопроса
Ivan Kretov
типа сначала просто вояем newtype Stuff = Stuff St...

Не, ну можно Text взять, методов у него полно

Ivan Kretov
типа сначала просто вояем newtype Stuff = Stuff St...

Ну между строкой и текстом лучше сразу текст брать, если ты не планируешь фьюзить обработку и использовать свой стафф в виде итератора по кодпоинтам

Nutritional Rabbit
Ну между строкой и текстом лучше сразу текст брать...

Хотя лейзи текст вроде бы тоже норм фьюзится

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта