簡體   English   中英

Haskell:弦尾“ a”

[英]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] )。 CharShow實例考慮了這一點,並覆蓋列表呈現(使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM