为使用Do表示法的函数加糖。但我在创建/转换函数以使用>gt;=只有lambda。感谢您的帮助。
此函数获取一个文件路径,读取它,将其转换为一个列表,然后获取结果列表,根据其长度将其一分为二,最后写入两个文件,一个文件包含列表的前半部分,另一个文件由列表的后半部分组成。无论如何,这就是我们的想法。
splitFile :: FilePath -> IO ()
splitFile file = do
x <- readFileUTF8 file
let y = splitAt (div (length $ lines x) 2) $ lines x
writeFile "/tmp/foo.txt-part1" $ unlines $ fst y
writeFile "/tmp/foo.txt-part2" $ unlines $ snd y
splitFile :: FilePath -> IO ()
splitFile file =
readFileUTF8 file >>= x ->
let y = splitAt (div (length $ lines x) 2) $ lines x in
(writeFile "/tmp/foo.txt-part1" $ unlines $ fst y) >>
(writeFile "/tmp/foo.txt-part2" $ unlines $ snd y)
但是您可以用>>= _ -> ..
替换>> ..
。
您也可以将y
转换为模式匹配,但为了完全忠实于原始模式,您需要使用惰性模式~(a, b)
..
let (a, b) = splitAt (div (length $ lines x) 2) $ lines x in
writeFile "/tmp/foo.txt-part1" (unlines a) >>
writeFile "/tmp/foo.txt-part2" (unlines b)