我刚写了一段代码,我想在IO Monad中使用guard function。但是,有no definition of MonadPlus for IO这意味着我们不能在IO域使用警戒。我见过an example of using the MabyeT transformer to use guard in the Maybe Monad,然后解除了所有的IO操作,但是如果我不必这样做,我真的不想这么做。Haskell IO的MonadPlus定义
什么,我想可能是一些例子:
handleFlags :: [Flag] -> IO()
handleFlags flags = do
when (Help `elem` flags) (putStrLn "Usage: program_name options...")
guard (Help `elem` flags)
... do stuff ...
return()
我在想,如果有一个很好的方式获得通过的MonadPlus或以其他方式声明的保护功能(或类似的东西)的IO单子。或者我做错了;有没有更好的方法在上面的函数中写出帮助信息?谢谢。
(PS我可以使用的if-then-else语句,但它似乎以某种方式击败的地步。更何况,对于很多的选项时,它会造成巨大的嵌套的量。)
有时候,你知道,你是正确的跟踪(使用警卫),但随后有人指出正确的想法(这个),你有一个额头拍打时刻。谢谢,我用这个,这正是我想要的。虽然我将camccann标记为答案,因为他向我展示了我的想法不好,我的选择是什么,然后指出你的做法。 – 2010-12-22 00:00:25
请注意,像cmdargs这样的库可以为你处理这些东西:) – 2010-12-22 00:30:41