Haskell -如何在IO函数中使用Maybe


main ::  IO ()
main = do
result <- function_returns_io_maybe -- type of result is Maybe x
-- if result maybe is Just, run function that return IO() with result, else do not run function.

如何在IO功能中使用Maybe ?

您可以在do块中编写任何表达式,只要该表达式具有该块的正确一元类型。特别是,您可以进行案例分析:

main = do
result <- something
case result of
Just r -> somethingElse r
Nothing -> return ()

(其中something :: IO (Maybe X); somethingElse :: X -> IO ())

就我个人而言,我会用lambda case和bind来写:

{-# LANGUAGE LambdaCase #-}
main = something >>= case
Just r -> somethingElse r
Nothing -> return ()

Maybe的案例分析用maybe组合子写得更简洁:

main = maybe somethingElse (return ()) =<< something

Control.Monad.Extra.whenJustM捕获整个操作:

import Control.Monad.Extra (whenJustM)
main = whenJustM something somethingElse

最新更新