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

Здравствуте. Изучаю Haskell. Есть вопрос, помогите пожалуйста понять одну вещь. Вот

есть typeclass Show. У него есть метод show . С ним все понятно. Но также есть метод showPrec. И я не понимаю, что он делает и зачем нужен. Да, он принимает число (операторный приоритет), данные какого-то типа и ...

Тут мое понимание заканчивается. ShowS это фукнция, которая ... что ? Как это связано с результатом showPrec ? Можете ли вы привести простой понятный пример?

13 ответов

32 просмотра

на вопрос "которая что?" отлично отвечает документация https://hackage.haskell.org/package/base-4.18.0.0/docs/Text-Show.html#t:ShowS попробуйте сформулировать более точный вопрос

xfides-Barabanov Автор вопроса
Cheese Syrowiecki
на вопрос "которая что?" отлично отвечает документ...

Я там был. Мало что понял из этого текста. Ищу более простые формулировки и, что более важно, простой пример этой операции

xfides Barabanov
Я там был. Мало что понял из этого текста. Ищу бол...

вообще примеры есть там же в документации. из класса можно перейти к экземплярам и коду их реализации. к сожалению, код почти всегда сгенерирован, но можно найти и не совсем пустую реализацию: instance Show RecSelError where showsPrec _ (RecSelError err) = showString err

если на пальцах, showsPrec должна давать дописывать в начало буфера. или давать функцию дописывания в начало буфера, что в сущности одно и то же

xfides-Barabanov Автор вопроса
Cheese Syrowiecki
если на пальцах, showsPrec должна давать дописыват...

О, уже какие-то мысли для меня. значит - есть какой то- буфер, в который мы можем помещать какие-то значение - почему именно в начало? а не в конец? - правильно ли я понимаю, что все то, что мы собрали в буфере, мы потом будет выводить как единую строку? - если да, то зачем параметр приоритета?

xfides Barabanov
О, уже какие-то мысли для меня. значит - есть ка...

да, скорее всего, оно всё будет выведено как целая строка, но не обязательно

xfides Barabanov
О, уже какие-то мысли для меня. значит - есть ка...

приоритет нужен, чтобы решать, когда надо или не надо расставлять скобки

xfides Barabanov
О, уже какие-то мысли для меня. значит - есть ка...

я специально отвечаю короткими мыслями, чтобы дать вам самостоятельно разобраться. это же чат бесплатной помощи, а не платные преподаватели

Предположим, вы хотите реализовать функцию show, которая по дереву синтаксического разбора выражения (AST) строит строку - текстовое представление выражения. Например, для узла который соответствует бинарной операции (+) надо вывести в строку левый аргумент, потом собственно знак оператора (+), потом правый аргумент. Типы поддеревьев могут быть разные, потребуем, чтобы они реализовывали интерфейс Show. Тогда show для (+) может использовать show, чтобы вывести поддеревья для аргументов. Но тут возникает проблемка - в зависимости от контекста подвыражение может понадобиться заключать в скобки. Можно, конечно, делать это всегда, но как-то неаккуратненько. И тут на помощь приходит showPrec...

Алексей ayaye :)
Предположим, вы хотите реализовать функцию show, к...

Кажется я понял немного. Нужно начать с того, что стоит представить что мы реализуем Show для какого-то весьма сложного типа данных, так? В частности для какой-то древовидной структуры данных?

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
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
Карта сайта