如果在读取之前它不存在,则haskell写入文件

Ash*_*egi 3 io haskell file

我正在学习haskell,我偶然发现了parse error on input contents'编译错误.

我想做的事 :

我将以前的会话状态存储在一个文件中.我在启动程序之前读了这个文件.但是,在第一次运行程序期间,文件可能不存在.在这种情况下,我想首先使用默认值创建文件然后继续.

main :: IO()
main = do
    -- Take input
   let fileName = "ashish-temp.txt"

   let dummyBoard = take 5 $ repeat "-----"

   fileExist <- doesFileExist fileName

   if False == fileExist
   then writeFile fileName $ unlines dummyBoard

   -- getting an error on this line
   contents <- readFile fileName

   -- do processing () :)

   --  i want the value in contents
   putStrLn "Done"
Run Code Online (Sandbox Code Playgroud)

此外,我认为,而不是写入dummyBoard文件,我可以初始化内容dummyBoard.但我也做不到.我猜两种方式应该是一样的.

请帮忙.谢谢.

编辑方案:

elseifhaskell中的每一个都是必需的.

此问题后您将面临的另一个问题是: *** Exception: ashish-temp.txt: openFile: resource busy (file is locked)

使用import qualified System.IO.Strict as SS.redFile阅读文件.

Sib*_*ibi 5

您的代码库存在一些问题:

  • 你错过了表达的else一部分if.在Haskell中,既然if是表达式,它将需要该else部分而不是其他语言,其中if-elseare语句和else部分不是必需的.
  • 到底是dim什么?你必须定义它.

一个工作程序显示类似于你想要做的概念将如下所示:

main :: IO()
main = do

   let fileName = "somefile.txt"

   fileExist <- doesFileExist fileName

   if not fileExist
   then writeFile fileName "something"
   else return ()

   contents <- readFile fileName
   -- do stuff with contents here

   putStrLn "Done"
Run Code Online (Sandbox Code Playgroud)

  • @AshishNegi我认为你对"return()"这个词感到困惑.Haskell`return`与其他语言的"return"有不同的含义.`return`不是程序的控制 - 退出路径.当您在`if-else`之后放置逻辑时,即使它转到`if`表达式的`else`部分,它也会被执行. (2认同)