@plyk

В чём смысл такого вывода Char'ов?

Ну допустим:
'a' - Это Char
"a" - Это String который на самом деле [Char] | Без полбутылки не смог разобраться но оказалось что двойные кавычки это аналог квадратной скобки.

Значение вида ['a'] :: [Char] отображается как "a". Т.е String.
Значение вида [['a'], ['b'], ['c']] :: [[Char]] отображается как ["a", "b", "c"]
В то же время ['a', 'b', 'c'] :: [Char] это "abc"

Как теперь вывести обычный список чаров если он отображается как список стрингов(синтаксически)?
Почему список символов отображается как строка символов, почему так сделано?
  • Вопрос задан
  • 67 просмотров
Пригласить эксперта
Ответы на вопрос 4
@plyk Автор вопроса
В общем похоже что это просто прихоть разработчиков. Хотя и при работе тут ничего не изменилось, эстетически смотреть на такое не совсем приятно.
Ответ написан
Комментировать
includedlibrary
@includedlibrary
Почему список символов отображается как строка символов, почему так сделано?

Потому строки в хаскеле - это список чаров. Двойные кавычки - это синтаксический сахар для списка чаров.
Ответ написан
Комментировать
@AlexSku
Программист по автоматике
1) Отображение - дело непростое. ФП предназначено для расчётов, а не для отображений. А именно: подаёте на вход функции параметры и получаете результат. Обычно под отображением понимают преобразование типа к строковому виду. В Haskell строка это список символов:
type String = [Char]
Если вы что-то делаете в интерпретаторе, то там ещё вычисления (и вывод) происходят в монаде IO.
Для вывода многих типов есть функция show.

2)
как теперь вывести список чаров

можете в интерпретаторе так и написать: ['a', 'b', 'c']
Есть синтаксический сахар: список char можно выводить в виде строки, т.е. без скобок, но в двойных кавычках: "abc"
если он отображается как список стрингов

нет такого. Список char отображается в двух видах (см. выше), они равнозначны.
почему список символов отображается как строка символов?

Это синтаксический сахар, чтобы не писать запятые после каждого символа.
Ответ написан
Комментировать
@mayton2019
Bigdata Engineer
Список символов - это строка в Haskell.

Просто так договорились. Это как договорились в С++ что строка ASCIZ это вектор символов который всегда завершается нулевы байтом. Этот факт никого не смущает? Все нормально сглотнули и пошли кодить. Верно?

А по поводу прочих синтаксических конфет - все в правовом поле. Все логично. Haskell - вообще один из самых строгих и логичных языков. В нем даже change-requests происходят не просто как в других языках. Не просто хотелки. Там - любое изменение - это через paper. Через какой-то документ имеющий научный смысл.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы