[英]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.