我正在学习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 S和S.redFile阅读文件.
您的代码库存在一些问题:
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)