Haskell - Applicative / Monad实例

时间:2016-03-05 19:19:36

标签: haskell monads applicative

我看到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无关,但这是我遇到的背景......

1 个答案:

答案 0 :(得分:3)

这是ghci的特点。它对IO动作进行了特殊处理,不仅仅是“计算”和打印(无论如何都不能打印IO动作),但是执行了结果印刷。所以,

Prelude> pure 1 :: IO Integer
1

根据behzad.nouri的评论,here

IO a提供了Show a而非a~(),否则行动执行。