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

5
当我在GHCi中输入return 1时,会得到以下结果。
> return 1
1

因为我没有指定return的类型,所以return 1的类型是Monad m, Num a => m a

尽管没有Show实例,GHCi如何显示1


3
默认的 Monad 是 IO。IO 没有 Show 实例,但当你返回一个 IO 时,GHCi 不会将其显示出来,而是运行它,并显示结果(这里是一个整数,它有 Show 实例)。 - Thilo
1个回答

9
Monad m => m 默认为 IO
然后执行 IO 操作,没有进行 I/O 操作,返回值。
Ghci 有两种操作模式:当评估的值具有类型 IO a 和当它不具有时。在第一种情况下,执行 IO 操作,显示由操作产生的 a 类型的值。在第二种情况下,仅显示评估的值。
由于您在 Ghci 中,return 1 :: (Monad m, Num a) => m a 的类型实际上是 IO Integerm 默认为 IOa 默认为 Integer,因此显示了 Integer1
启用 GHCi 显示类型,使用 ghci> :set +t,然后尝试 return 1.0。它将返回 Double,并且 Double 也具有 Show 实例。
> return 1
1
it :: Integer

> return 1.0
1.0
it :: Double

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接