为什么"什么都不归"都没有回归?

Jef*_*own 11 monads haskell maybe

"return a"应该包含在一些Monad的上下文中:

*Main> :i return
class Applicative m => Monad (m :: * -> *) where
  ...
  return :: a -> m a
  ...
        -- Defined in ‘GHC.Base’
Run Code Online (Sandbox Code Playgroud)

如果我问GHCI"返回什么"的类型是什么,它符合:

*Main> :t return Nothing
return Nothing :: Monad m => m (Maybe a)
Run Code Online (Sandbox Code Playgroud)

但是,如果我评估它,我看不到外蒙纳德,只有内在的可能:

*Main>  return Nothing
Nothing
Run Code Online (Sandbox Code Playgroud)

Rei*_*chs 21

当GHCi去打印一个值时,它会尝试两种不同的东西.首先,它尝试将类型统一IO a为某些a.如果它可以这样做,那么它执行IO操作并尝试打印结果.如果它不能这样做,它会尝试打印给定的值.在你的情况下,Monad m => m (Maybe a)可以统一IO (Maybe a).

查看此GHCi会话可能有所帮助:

Prelude> return Nothing
Nothing
Prelude> return Nothing :: IO (Maybe a)
Nothing
Prelude> return Nothing :: Maybe (Maybe a)
Just Nothing
Prelude> Nothing
Nothing
Run Code Online (Sandbox Code Playgroud)