我只是写了一小段代码,我想在IO Monad中使用guard功能.但是,没有MonadPlus for IO的定义,这意味着我们不能在IO 域中使用guard.我已经看到了使用MabyeT变换器在Maybe Monad中使用guard然后解除所有IO操作的示例,但如果我不需要,我真的不想这样做.
我想要的一些例子可能是:
handleFlags :: [Flag] -> IO ()
handleFlags flags = do
when (Help `elem` flags) (putStrLn "Usage: program_name options...")
guard (Help `elem` flags)
... do stuff ...
return ()
Run Code Online (Sandbox Code Playgroud)
我想知道是否有一种很好的方法可以通过MonadPlus声明或其他方式在IO Monad中获得一个保护功能(或类似的东西).或许我做错了; 有没有更好的方法在上面的函数中编写帮助消息?谢谢.
(PS我可以使用if-then-else语句,但它似乎以某种方式打败了这一点.更不用说对于很多选项,它将导致大量的嵌套.)