есть typeclass Show. У него есть метод show . С ним все понятно. Но также есть метод showPrec. И я не понимаю, что он делает и зачем нужен. Да, он принимает число (операторный приоритет), данные какого-то типа и ...
Тут мое понимание заканчивается. ShowS это фукнция, которая ... что ? Как это связано с результатом showPrec ? Можете ли вы привести простой понятный пример?
на вопрос "которая что?" отлично отвечает документация https://hackage.haskell.org/package/base-4.18.0.0/docs/Text-Show.html#t:ShowS попробуйте сформулировать более точный вопрос
Я там был. Мало что понял из этого текста. Ищу более простые формулировки и, что более важно, простой пример этой операции
вообще примеры есть там же в документации. из класса можно перейти к экземплярам и коду их реализации. к сожалению, код почти всегда сгенерирован, но можно найти и не совсем пустую реализацию: instance Show RecSelError where showsPrec _ (RecSelError err) = showString err
если на пальцах, showsPrec должна давать дописывать в начало буфера. или давать функцию дописывания в начало буфера, что в сущности одно и то же
О, уже какие-то мысли для меня. значит - есть какой то- буфер, в который мы можем помещать какие-то значение - почему именно в начало? а не в конец? - правильно ли я понимаю, что все то, что мы собрали в буфере, мы потом будет выводить как единую строку? - если да, то зачем параметр приоритета?
только в начало, потому что String = [Char]
да, скорее всего, оно всё будет выведено как целая строка, но не обязательно
ShowS это просто оптимизация конкатенации
приоритет нужен, чтобы решать, когда надо или не надо расставлять скобки
я специально отвечаю короткими мыслями, чтобы дать вам самостоятельно разобраться. это же чат бесплатной помощи, а не платные преподаватели
Предположим, вы хотите реализовать функцию show, которая по дереву синтаксического разбора выражения (AST) строит строку - текстовое представление выражения. Например, для узла который соответствует бинарной операции (+) надо вывести в строку левый аргумент, потом собственно знак оператора (+), потом правый аргумент. Типы поддеревьев могут быть разные, потребуем, чтобы они реализовывали интерфейс Show. Тогда show для (+) может использовать show, чтобы вывести поддеревья для аргументов. Но тут возникает проблемка - в зависимости от контекста подвыражение может понадобиться заключать в скобки. Можно, конечно, делать это всегда, но как-то неаккуратненько. И тут на помощь приходит showPrec...
Кажется я понял немного. Нужно начать с того, что стоит представить что мы реализуем Show для какого-то весьма сложного типа данных, так? В частности для какой-то древовидной структуры данных?
достаточно (+) ,(*) и констант
Обсуждают сегодня