11
“回报”应该在一些单子的背景下紧裹:为什么“return Nothing”不返回任何内容?
*Main> :i return
class Applicative m => Monad (m :: * -> *) where
...
return :: a -> m a
...
-- Defined in ‘GHC.Base’
如果我问GHCI什么“返回Nothing”的类型,它符合是:
*Main> :t return Nothing
return Nothing :: Monad m => m (Maybe a)
但如果我评价它,我看不出有任何外单子,只是内可能:
*Main> return Nothing
Nothing
GHCI默认为IO单子,如果你不指定一个。它只是打印一个'IO(也许a)' – 4castle
@ 4castle的内容轻微地误导shachaf:'IO(也许a)'包含一个'Maybe a',就像'/ bin/ls'包含一个列表一样的文件。这可能听起来有些迂腐,但它不会打印'IO(也许a)'的内容。它运行一个'IO(也许a)',然后打印结果。区别可能很重要。 –
@DavidYoung我个人觉得这个区别很重要,因为IO monad的工作是了解价值的内部表现。出于推理的目的,我通常认为所有单子都是容器(不管它们是否包含价值)。 – 4castle