我剛寫了一段代碼,我想在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