来自ghci>
提示符,我想 readFile “filename.text”并将生成的字符串作为参数传递给 words 函数进行转换句子单词列表。
由于
答案 0 :(得分:2)
您可以在readFile返回的IO monad“内部”执行纯函数(单词)。
readFile :: FilePath -> IO String
和
words :: String -> [String]
所以你可以简单地做
fmap words $ readFile "filename.txt"
,其类型为IO [String]。如果你在ghci(它本身就是IO monad的“内部”)中执行此操作,您将显示单词列表。
编辑:
如果您想应用多个转换,您可能希望干净地分离纯部分(基于@ Davislor的解决方案和评论):
readFile "filename.txt" >>= (return . sort . words) >>= mapM_ putStrLn
此处的return
只需升级到IO,您只需将return
替换为mapM_ putStrLn
(排序器,但不太清晰的区别)。
另一种解决方案可能是应用风格:
sort <$> words <$> readFile "filename.txt" >>= mapM_ putStrLn
或使用do notation(命令式):
do ; f <- readFile "filename.txt"; let out = sort (words f) in mapM_ putStrLn out
(这很难看,因为我使用了;
而不是换行符)或者只是(不那么强制性地:):
do ; f <- readFile "filename.txt"; mapM_ putStrLn $ sort $ words f