[英]Is there a standard function for “do this if Just x”?
我有以下代碼:
doIf :: (a -> IO ()) -> Maybe a -> IO ()
doIf f x = case x of
Just i -> f i
Nothing -> return ()
main = do
mapM_ (doIf print) [Just 3, Nothing, Just 4]
哪個輸出:
3
4
換句話說, Just
值被打印,但Nothing
值不會導致任何操作。 (並且不要中斷計算。)
在Haskell庫中是否有這樣的標准函數? 此外,這可以更通用嗎? 我嘗試用mb
替換IO ()
但是然后return ()
不起作用。 你如何為任何monad一般寫return ()
? (如果可能..)甚至可以將Maybe
推廣到這里?
最后,我可以完全doIf
功能嗎? 我可以有一個運算符<#>,除非Nothing
?
print <#> Just 3
print <#> Nothing
會輸出
3
但我不知道這是否可行。
看看這個功能:
maybe :: b -> (a -> b) -> Maybe a -> b
你幾乎把它寫在doIf
除了固定的return ()
您的doIf
是Data.Foldable.traverse_
。
你通常可以通過Hoogle找到這種東西,但此刻它似乎有點破碎。 我在系統上安裝的命令行版本將Data.Foldable.traverse_
作為查詢的第一個結果(a -> IO ()) -> Maybe a -> IO ()
。
當然,您可以定義該運算符,它只是(<#>) = doIf
(或(<#>) = Data.Foldable.traverse_
)。
你可以做的事情是這樣的:
main = do
mapM_ print $ catMaybes [Just 3, Nothing, Just 4]
請參閱catMaybes的文檔。
(注意:未經測試的代碼)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.