haskell write to file it if it does not exists before reading

file, haskell, io

Solution

There are some problem with your codebase:

- You are missing the `else` part of your `if` expression. In Haskell, since `if` is an expression , it would need the `else` part as opposed to other languages where the `if-else` are statements and the else part is not mandatory.

- What exactly is `dim` ? You have to define it.

A working program which shows similar in concept of what you want to do will look like this:

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"

Problem

I am learning haskell and am stumbled upon the `parse error on input contents'` compilation error. What i want to do : I store my previous session state state in a file. I read this file before starting the program. However, during the first run of program, file may not exist. In this case, i want to first create file first with default value and then proceed ahead. ``` 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" ``` Also, i think that rather than writing `dummyBoard` to the file i can just initialize the contents with `dummyBoard`. But i also failed in doing it. And i guess the way should be the same for both. Please help. Thanks. Edit Solution: `else` is required for every `if` in haskell. Also another problem that you would face after this problem is : `*** Exception: ashish-temp.txt: openFile: resource busy (file is locked)` use `import qualified System.IO.Strict as S` and `S.redFile` for reading file.

Original source