【问题标题】:Haskell: Tail of a String "a"Haskell:字符串“a”的尾部
【发布时间】:2018-07-04 07:28:28
【问题描述】:

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

例子:

tail "a"
= ""

但是你可以创建一个字符串为:

'a' : []
= "a"

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

如果你这样做

tail ["x"]

然后你得到空列表[]

这有点令人困惑。

【问题讨论】:

    标签: string haskell tail


    【解决方案1】:

    因为空字符串Chars的空列表,所以只是shown不同:

    Prelude> [] :: String
    ""
    

    【讨论】:

      【解决方案2】:

      这是因为空的String 和空的Char 列表是完全相同的东西(type String = [Char])。 Show instance for Char 考虑到这一点并覆盖列表呈现(使用showList)以呈现为字符串。这就是为什么String 没有Show 实例的原因; Show a => Show [a] 处理所有列表并使用showList [Char]

      顺便说一句,文本比一串字符复杂得多。在 C 和 Haskell 中很早就选择了这种近似,但是像 Data.Text 这样的其他实现可能有更好的方法。

      【讨论】:

        【解决方案3】:

        当您定义 Show 类型类的实例时,您可以实现方法 showList,这是该类型列表的显示方式。所以:

        showList [] = "" -- I guess this is not the actual implementation, but something similar
        

        问候,

        【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-23
        • 1970-01-01
        • 2011-10-01
        • 1970-01-01
        • 2016-06-18
        相关资源
        最近更新 更多