繁体   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