"return 1" 如何在 GHCi 中显示“1”?

How does "return 1" show "1" in GHCi?

这是我在 GHCi 中输入 return 1 时得到的结果。

> return 1
1

由于我没有指定return的类型,return 1的类型是Monad m, Num a => m a

即使 Show 没有实例,GHCi 如何显示 1

Monad m => m默认为IO,就是这样。

然后执行IO操作,不做I/O,returns值。

Ghci 有两种输出操作模式:评估值具有类型 IO a 和不具有类型。在第一种情况下,执行 IO 操作,并显示操作产生的类型 a 的值。在第二种情况下,只显示评估值。

因为你在 Ghci 中,return 1 :: (Monad m, Num a) => m a 的类型实际上是 IO Integerm 默认为 IOa 默认为 Integer,因此显示 Integer 1

使用 ghci> :set +t 启用显示类型的 GHCi,然后尝试 return 1.0。它 returns DoubleDouble 也有 Show 实例。

> return 1
1
it :: Integer

> return 1.0
1.0
it :: Double

> return "3"
"3"
it :: [Char]

> print "3"
"3"
it :: ()