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

时间:2019-05-23 07:08:33

标签: haskell monads type-inference ghci

这是在GHCi中键入return 1时得到的。

> return 1
1

由于我未指定return的类型,因此return 1的类型为Monad m, Num a => m a

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

1 个答案:

答案 0 :(得分:9)

Monad m => m默认为IO

然后执行IO操作,不执行I / O,然后返回值。

Ghci有两种输出操作模式:评估值的类型为IO a时,以及没有时。在第一种情况下,将执行IO操作,并显示该操作产生的类型a的值。在第二种情况下,仅显示评估值。

由于您位于Ghci,所以return 1 :: (Monad m, Num a) => m a的类型实际上是IO Integerm默认为IO,而a默认为Integer,因此显示了Integer 1

使用ghci> :set +t启用显示类型的GHCi,然后尝试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 :: ()