有抱負的哈斯克勒在這里。我撰寫了一個腳本來獲取檔案路徑引數,讀取每行都是相對檔案路徑的內容,計算每個檔案路徑的行數并將其列印到命令列。它依賴于System.Directory.Internal.Prelude.for_遍歷檔案的內容并將每個長度列印到控制臺。
- 問題 1:您將如何洗掉
for回圈? - 問題 2:如果
getFileLength有 `FilePath -> IO(Maybe(Int)) 的簽名,您將如何重構程式?(這個問題有意義嗎?)
import System.Environment
import System.Directory
import System.IO
import Data.Char
import System.Directory.Internal.Prelude (for_)
main = do
(configPath:_) <- getArgs
configContents <- readFile configPath
let filePaths = lines configContents
for_ filePaths (\path -> do getFileLength path)
getFileLength :: FilePath -> IO()
getFileLength path = do
contents <- readFile path
putStrLn $ "- [ ] " path " (" show (length (lines contents)) ")"
謝謝
uj5u.com熱心網友回復:
您可以使用mapM_ :: (Foldable t, Monad m) => (a -> m b) -> t a -> m ()或traverse_ :: (Foldable t, Applicative f) => (a -> f b) -> t a -> f ():
main :: IO ()
main = do
(configPath:_) <- getArgs
configContents <- readFile configPath
mapM_ getFileLength (lines configContents)
或者:
import Data.Foldable(traverse_)
main :: IO ()
main = do
(configPath:_) <- getArgs
configContents <- readFile configPath
traverse_ getFileLength (lines configContents)
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/536677.html
標籤:哈斯克尔
上一篇:了解“newtype”關鍵字
