此错误消息“功能应用程序中发生意外阻止”是什么意思?

时间:2019-09-25 18:53:47

标签: haskell

我正在尝试编译此函数,但出现错误。 Haskell不满意是什么?

copyFile :: FilePath ->  FilePath -> IO()
copyFile fromFile toFile = 
     do c <- readFile fromFile
    writeFile toFile c 

函数应用程序中意外的do块:         做c <-readFile fromFile     你可以用括号写     还是您想启用BlockArguments?

1 个答案:

答案 0 :(得分:5)

缩进并不完全正确,因此编译器将其解析为好像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 ()。这样,您就不会在内存中加载文件的内容(该文件可能大于可用内存量)。某些文件系统可以显着提高效率,例如,仅对文件添加一个额外的引用,并在两个文件之一被修改的情况下制作真实副本。