我已经看到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
,否则只会执行该操作。