GHCi中的“return 1”如何显示“1”? [复制]
Posted
技术标签:
【中文标题】GHCi中的“return 1”如何显示“1”? [复制]【英文标题】:How does "return 1" show "1" in GHCi? [duplicate] 【发布时间】:2019-05-23 07:08:33 【问题描述】:这是我在 GHCi 中输入 return 1
时得到的结果。
> return 1
1
由于我没有指定return
的类型,所以return 1
的类型是Monad m, Num a => m a
即使没有Show
的实例,GHCi 如何显示1
?
【问题讨论】:
默认的 Monad 是 IO。 IO没有Show,但是当你返回一个IO时,GHCi不会Show它,而是运行它,并显示结果(这里是一个Integer,确实有Show)。 【参考方案1】:Monad m => m
默认为IO
,就是这样。
然后执行IO动作,不做I/O,返回值。
Ghci 有两种输出操作模式:当评估值的类型为IO a
时,当它没有时。在第一种情况下,执行 IO 操作,并显示该操作生成的类型为 a
的值。在第二种情况下,只显示评估值。
由于您在 Ghci 中,return 1 :: (Monad m, Num a) => m a
的类型实际上是 IO Integer
。 m
默认为IO
,a
默认为Integer
,所以会显示Integer
1
。
启用显示类型的 GHCi,使用 ghci> :set +t
,然后尝试 return 1.0
。它返回Double
,而Double
s 也有Show
实例。
> return 1
1
it :: Integer
> return 1.0
1.0
it :: Double
> return "3"
"3"
it :: [Char]
> print "3"
"3"
it :: ()
【讨论】:
以上是关于GHCi中的“return 1”如何显示“1”? [复制]的主要内容,如果未能解决你的问题,请参考以下文章