Dan*_*l.T -1 monads haskell functor
我刚刚开始再次学习 Haskell(我已经尝试过几次)并且我写了一个小函数,它应该将文件下载到给定的文件路径。如果 URL 是Some它应该下载文件,如果是Nothing它应该什么都不做。
downloadFile :: URL -> FilePath -> IO ()
downloadFile url fp = ...
maybeDownloadFile :: Maybe URL -> FilePath -> IO ()
maybeDownloadFile ( Just url ) fp = downloadFile url fp
maybeDownloadFile Nothing fp = return ()
Run Code Online (Sandbox Code Playgroud)
所以它本质上只是包装了downloadFile函数,但是用 aMaybe URL而不是 a URL。问题是,我觉得这可以通过使用一元运算符(或者可能使用函子)而不使用匹配表达式来更优雅地实现。有这样的运营商吗?
对 采取一些行动,对Just什么都不做Nothing,正是traverse_(或mapM_)所做的。翻转你的论点,让它更漂亮。
downloadFile :: FilePath -> URL -> IO ()
downloadFile fp url = ...
maybeDownloadFile :: FilePath -> Maybe URL -> IO ()
maybeDownloadFile = traverse_ . downloadFile
Run Code Online (Sandbox Code Playgroud)