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函数中使用?
发布于 2021-09-18 19:33:57
只要表达式具有正确的一元类型,就可以在do
块中写入任何表达式。特别是,您可以进行案例分析:
main = do
result <- something
case result of
Just r -> somethingElse r
Nothing -> return ()
(其中something :: IO (Maybe X); somethingElse :: X -> IO ()
)
就我个人而言,我会用一个lambda案例和一个绑定来写这个:
{-# 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
https://stackoverflow.com/questions/69239559
复制相似问题