Haskell:字符串“ a”的尾巴

时间:2018-07-04 07:28:29

标签: string haskell tail

为什么只有一个字母的字符串的尾部是空字符串而不是空List?

示例:

tail "a"
= ""

但是您可以将字符串创建为:

'a' : []
= "a"

所以我认为尾巴应该是空列表[]

如果您举个例子

tail ["x"]

然后您将获得一个空列表[]

这有点令人困惑。

3 个答案:

答案 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

此致