我尝试重命名Haskell中的文件列表,并使用以下代码。重命名Haskell中的文件列表
let listOfFullPath = ["/home/name/oldFile.txt"]
let outputList = map(\x -> renameFile x "/home/name/newfile.txt") listOfFullPath
当我运行代码时,我没有看到文件被重命名。
有谁知道renameFile
为什么不能在map()中工作吗?
我知道renameFile :: FilePath -> FilePath -> IO()
和我也尝试以下操作:
let outputList = map(\x -> renameFile x "/home/name/newfile.txt" >> return()) listOfFullpath
您是在GHCi中运行它还是正在编译的文件的这一部分?无论哪种情况,您都没有执行“IO”动作。充其量,你正在定义其中的一部分。 – Alec
'let x = print 3'不会打印任何东西:它只定义'x',在执行时会打印3.要执行'x',必须在'main'或其他一些被调用的IO动作内运行(不只是定义)从'main'。同样,'let xs = [print 3,print 4]'不会打印任何东西。主要的是,如果我们运行'print(length xs)',我们得到2(长度),而IO操作'print 3,print 4'仍然被忽略。如果我们使用'main = sequence xs',则打印3和4。 (我会建议查看一个IO教程。) – chi
我确实拥有并运行它。 – 1234