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 a
有Show a
而不是a~()
,否则只有 动作被执行。
我看到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 a
有Show a
而不是a~()
,否则只有 动作被执行。