Haskell - 应用/单体实例



我已经看到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的评论,这是相关的手册部分。


前提是它与Show a而不是a~() IO a,否则只会执行该操作。

最新更新