[英]Haskell: Tail of a String “a”
為什么只有一個字母的字符串的尾部是空字符串而不是空List?
例:
tail "a"
= ""
但是您可以將String創建為:
'a' : []
= "a"
所以我認為尾巴應該是空的List []
。
如果你這樣做
tail ["x"]
然后您得到空的List []
。
這有點令人困惑。
因為空字符串是 Char
的空列表,所以只是以不同的方式show
n:
Prelude> [] :: String
""
這是因為空的String
和空的Char
列表完全相同( type String = [Char]
)。 Char
的Show
實例考慮了這一點,並覆蓋列表呈現(使用showList
)以呈現為字符串。 這就是為什么String
沒有Show
實例的原因; Show a => Show [a]
處理所有列表並使用showList [Char]
。
順便說一句,文本比只是一串字符要復雜得多。 這種近似是在C和Haskell的早期選擇的,但是其他實現如Data.Text
可能有更好的方法。
定義Show type類的實例時,可以實現showList方法,該方法是該類型的列表的顯示方式。 所以:
showList [] = "" -- I guess this is not the actual implementation, but something similar
問候,
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.