Haskell - Applicative/Monad 个实例

Haskell - Applicative/Monad instances

我看到pure 1的类型是(Num a, Applicative f) => f a,很明显。 所以如果我想把它变成 Maybe Int:

Prelude> pure 1 :: Maybe Int
Just 1

这个呢?

Prelude> pure 1
1
Prelude> return 1
1

这是怎么回事?为什么它不抱怨不知道选择哪个实例??

编辑

我认为这种行为实际上与 monad 或应用程序无关,但这是我想到它的背景...

这是 ghci 的一个特点。它对 IO 操作有特殊处理,这些操作不仅仅是“计算”和打印(无论如何你不能打印 IO 操作),而是执行和 结果 打印。所以,

Prelude> pure 1 :: IO Integer
1

根据 behzad.nouri 的评论,here's the relevant manual section


前提是IO aShow a而不是a~(),否则只有 动作被执行。