File 如果在读取之前它不存在,haskell会将其写入文件
我正在学习haskell,无意中发现了输入内容上的File 如果在读取之前它不存在,haskell会将其写入文件,file,haskell,io,File,Haskell,Io,我正在学习haskell,无意中发现了输入内容上的解析错误'编译错误 我想做的是: 我将以前的会话状态存储在一个文件中。我在启动程序之前阅读了这个文件。但是,在程序的第一次运行期间,文件可能不存在。在这种情况下,我希望首先使用默认值创建文件,然后继续 main :: IO() main = do -- Take input let fileName = "ashish-temp.txt" let dummyBoard = take 5 $ repeat "-----"
解析错误'
编译错误
我想做的是:
我将以前的会话状态存储在一个文件中。我在启动程序之前阅读了这个文件。但是,在程序的第一次运行期间,文件可能不存在。在这种情况下,我希望首先使用默认值创建文件,然后继续
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"
main::IO()
main=do
--听取意见
让fileName=“ashish temp.txt”
让dummyBoard=取5美元重复“-”
fileExist您的代码库存在一些问题:
- 您缺少
if
表达式的else
部分。在Haskell中,由于if
是一个表达式,因此它需要else
部分,而其他语言中的if-else
是语句,而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"
main::IO()
main=do
让fileName=“somefile.txt”
fileExist问题的第二部分尚未回答
此外,我认为与其将dummyBoard
写入文件,不如使用dummyBoard
初始化内容。但我也没能做到。我想这两种方法应该是一样的
事实上,你可以这样做:
contents <- if fileExist
then readFile fileName
else return $ unlines dummyBoard
内容您的其他内容在哪里
?您可能想在时使用而不是如果我认为否则是不必要的。当使用时,我也无法在上找到任何文档。else
在Haskell中是强制性的(否则,10+(如果3==4,那么2)
是什么?)。对于当
时,您需要导入控制。Monad
如果False==…
为什么要编写?“这似乎很不自然。”BartekBanachewicz我编辑了这个问题。实际上,“我将以前的会话状态存储在一个文件中。我在启动程序之前读取了此文件。但是,在第一次运行程序期间,文件可能不存在。在这种情况下,我希望首先使用默认值创建文件,然后继续。”我将删除dim
,这是一个重构问题。我想在写入文件后执行do stuff
部分。我没有任何逻辑。在这种情况下,我可以用dummyBoard
将内容缩进斜体吗?怎么做?@AshishNegi在这种情况下,您可以在else部分给出return()
。之后,请阅读文件并将您的逻辑放在那里。很抱歉,我的意思是,我使用该文件只是为了初始化数据。我必须总是做那些事。无论是使用文件中的数据,还是使用dummyBoard
@AshishNegi,我认为您可能会混淆返回()
。Haskellreturn
与其他语言的return
具有不同的含义<代码>返回
不是程序的控制-退出路径。当您将逻辑置于if-else
之后时,它将被执行,即使它转到if
表达式的else
部分。