Haskell: Хвост Струны "а" - PullRequest
0 голосов
/ 04 июля 2018

Почему хвост строки с одной буквой является пустой строкой, а не пустым списком?

Пример:

tail "a"
= ""

Но вы можете создать строку как:

'a' : []
= "a"

Поэтому я подумал, что хвост должен быть пустым. Список [].

И если вы делаете, например,

tail ["x"]

тогда вы получите пустой список [].

Это немного сбивает с толку.

Ответы [ 3 ]

0 голосов
/ 04 июля 2018

Поскольку пустая строка является пустым списком Char с, просто show n по-другому:

Prelude> [] :: String
""
0 голосов
/ 04 июля 2018

Это потому, что пустой String и пустой список Char - это одно и то же (type String = [Char]). Экземпляр Show для Char учитывает это и переопределяет рендеринг списка (используя showList) для отображения в виде строк. Вот почему для String нет экземпляра Show; Show a => Show [a] обрабатывает все списки и использует showList [Char].

Кроме того, текст намного сложнее, чем просто строка символов. Это приближение было выбрано на ранних этапах C и Haskell, но другие реализации, такие как Data.Text, могут иметь лучшие подходы.

0 голосов
/ 04 июля 2018

Когда вы определяете экземпляр класса Show type, вы можете реализовать метод showList, который является способом отображения списка этого типа. Итак:

showList [] = "" -- I guess this is not the actual implementation, but something similar

С уважением,

...