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