我看到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或applicatives无关,但这是我遇到的背景......
答案 0 :(得分:3)
这是ghci的特点。它对IO
动作进行了特殊处理,不仅仅是“计算”和打印(无论如何都不能打印IO动作),但是执行了结果印刷†。所以,
Prelude> pure 1 :: IO Integer
1
根据behzad.nouri的评论,here。
† 为IO a
提供了Show a
而非a~()
,否则仅行动执行。