此错误消息" Unexpected do block in function application"是什么意思?



我正在尝试编译此函数,但出现错误。哈斯克尔不高兴的是什么?

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 ()。这样,您就不会在内存中加载文件的内容(文件可能大于可用内存量(。一些文件系统可以显着提高效率,例如,仅添加对文件的额外引用,并在修改两个文件之一的情况下制作真实副本。

相关内容

最新更新