gpt4 book ai didi

haskell - 在 GHCi 中,为什么我无法在 REPL 中显示 `pure 1`?

转载 作者:行者123 更新时间:2023-12-02 00:56:40 24 4
gpt4 key购买 nike

我尝试将提升值分配给a

λ> :m Control.Applicative
λ> let a = pure 1

当我在 REPL 中评估 a 时,它会打印 1

λ> a
1

因此,我认为a可能有一个show的实现,并尝试了这个:

λ> show a

但是 GHCi 抛出错误:

<interactive>:70:1-4:
No instance for (Show (f0 a0)) arising from a use of ‘show’
The type variables ‘f0’, ‘a0’ are ambiguous
Note: there are several potential instances:
instance (Integral a, Show a) => Show (GHC.Real.Ratio a)
-- Defined in ‘GHC.Real’
instance (Show a, Show b) => Show (a, b) -- Defined in ‘GHC.Show’
instance (Show a, Show b, Show c) => Show (a, b, c)
-- Defined in ‘GHC.Show’
...plus 32 others
In the expression: show a
In an equation for ‘it’: it = show a

有人对此有什么想法吗?

最佳答案

GHCi 将 Applicative f => f 默认为 IO。当你这样做时

λ> a
1

您实际上运行了一个IO Integer操作,例如

λ> let a = return 1
λ> a
1

GHCi 默认情况下打印 IO 操作的结果。因此结果行中出现 1。 (非常令人困惑的是,这个 1 不是 a 的值,也不是作为 IO 运行 a 的输出action——只是后者的返回值。)

GHCi 使用复杂的启发式方法来处理用户输入。首先,它尝试显示它,可能会默认某些类型类,例如数字类。这在你的情况下失败了。当失败时,它会尝试查看输入是否是 IO 操作。在这种情况下,将运行该操作,如果可以显示结果,则将其打印出来。

请注意,这种 GHCi 魔法仅发生在顶层。当您尝试show a时,GHCi会在整个show a上尝试它的魔力,而不是在a上,因此不会发生相同的效果。

关于haskell - 在 GHCi 中,为什么我无法在 REPL 中显示 `pure 1`?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30464891/

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