gpt4 book ai didi

haskell - GHCI 中的不同输出

转载 作者:行者123 更新时间:2023-12-02 13:44:01 28 4
gpt4 key购买 nike

使用 M 1 运行此命令将显示一个新行,而 a 将在 ghci 输出中显示字符“\n”。因为它们是相同的角色,所以我期望有相同的行为。

有什么理由吗?

data V = M Int
instance Show V where
show m = a

a :: [Char]
a = "\n"

最佳答案

每当在 GHCi 中显示一个值时,它都会使用该对象的 Show 实例,通过应用 show 函数将其转换为人类可读的文本,然后打印结果字符串。就您而言,发生的情况是:

  • 您已将 VShow 实例定义为常量 "\n" 或换行符。因此,当 GHCi 尝试显示 V 类型的值时,它会输出换行符。
  • 相比之下,StringShow 实例的定义方式是,对于任何字符串 sshow s 将输出 s 的 Haskell 表示。例如,show "\n" 将给出 "\"\\n\" 的结果(即引号、反斜杠、n ,引号)。(尝试在 GHCi 中运行 show "myString" 并查看不同字符串的结果,以了解其工作原理。)因此,当 GHCi 显示 String 时>,它接受字符串(在您的情况下是换行符),使用 show 将其转换为带有转义字符的人类可读格式,然后显示该新字符串。

为什么show以这种复杂的方式对字符串实现?我不太确定,但一种可能性是消歧: show 1"1",但 show "1" “\”1\“”。当打印到控制台时,前者显然是一个数字,而后者显然是一个字符串。

关于haskell - GHCI 中的不同输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58965469/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com