为什么只有一个字母的字符串的尾部是空字符串而不是空List?
示例:
tail "a"
= ""
但是您可以将字符串创建为:
'a' : []
= "a"
所以我认为尾巴应该是空列表[]
。
如果您举个例子
tail ["x"]
然后您将获得一个空列表[]
。
这有点令人困惑。
答案 0 :(得分:9)
因为空字符串是Char
的空列表,所以只是show
n不同:
Prelude> [] :: String
""
答案 1 :(得分:1)
这是因为空的String
和空的Char
列表是完全一样的(type String = [Char]
)。 Show
instance for Char
考虑到这一点,并覆盖列表呈现(使用showList
)以呈现为字符串。这就是为什么String
没有Show
实例的原因; Show a => Show [a]
处理所有列表并使用showList [Char]
。
顺便说一句,文本不仅比一串字符复杂得多。这种近似是在C和Haskell的早期选择的,但是其他类似Data.Text
的实现可能有更好的方法。
答案 2 :(得分:0)
定义Show type类的实例时,可以实现showList方法,该方法是显示该类型的列表的方式。所以:
showList [] = "" -- I guess this is not the actual implementation, but something similar
此致