我正在尝试编译此函数,但出现错误。哈斯克尔不高兴的是什么?
copyFile :: FilePath -> FilePath -> IO()
copyFile fromFile toFile =
do c <- readFile fromFile
writeFile toFile c
函数应用程序中意外的执行阻塞: 做 c <- 从文件读取文件 你可以用括号写它 或者你的意思是启用BlockArguments?
缩进并不完全正确,因此编译器解析它,就好像do
只应用于c <- readFile fromFile
,而不是应用于writeFile
。
copyFile :: FilePath -> FilePath -> IO()
copyFile fromFile toFile = do
c <- readFile fromFile
writeFile toFile c
或更短:
copyFile :: FilePath -> FilePath -> IO()
copyFile fromFile toFile = readFile fromFile >>= writeFile toFile
话虽如此,我强烈建议改用copyFile :: FilePath -> FilePath -> IO ()
或copyFileWithMetadata :: FilePath -> FilePath -> IO ()
。这样,您就不会在内存中加载文件的内容(文件可能大于可用内存量(。一些文件系统可以显着提高效率,例如,仅添加对文件的额外引用,并在修改两个文件之一的情况下制作真实副本。