去糖Do Notation函数



为使用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)

最新更新