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