Haskell在文件中写入一个列表并稍后阅读

时间:2014-08-24 06:44:08

标签: haskell

我正在尝试将列表写入文件,稍后我也想将文件内容读入列表中。

所以我有一个这样的清单[" ABC"," DEF"]

我尝试过像

这样的事情
hPrint fileHandle listName

这只会打印到文件"["ABC","DEF"]"

我已尝试过unlines,但其打印方式与"ABC\nDEF\n"

相同

现在在这两种情况下,我都无法回读正确的列表。输出文件有引号,因此当我阅读时,我得到这样的[" [" ABC"," DEF"]""]即列表中的单个字符串。

由于我没有成功,我尝试逐行编写列表,我尝试应用地图和函数来编写列表k = map (\x -> hPrint fileSLC x) fieldsBefore,它没有做任何事情,文件是空白的。我想如果我把所有内容写成单独的行,我稍后就可以像(lines src)那样阅读。

我知道我正在做的事情是错的,但我只是第二次在Haskell上编写代码,上次我只写了一个非常小的文件阅读程序。从命令式转向功能性并非易事。 :(

2 个答案:

答案 0 :(得分:3)

尝试使用hPutStrLnunlines代替hPrinthPrint内部调用show会导致String被引用和转义。

hPutStr fileHandle (unlines listName)

或者,使用mapMforM。一个详细的例子是:

forM_ listName $ \string ->
   hPutStrLn string

这可以简化(" eta-contract",在lambda-calculus术语中)

forM_ listName hPutStrLn

答案 1 :(得分:0)

如您所见,当您从文件中读取时,您会得到String。要将此String转换为列表,您需要解析它。

要使k = map (\x -> hPrint fileSLC x) fieldsBefore生效,您需要使用mapMmapM_代替map