Haskell 将字符串输出保存到文件

Haskell 将字符串输出保存到文件,haskell,Haskell,在使用执行字符串置换后 listofstrings= ["string1", "string2", "string3", "string4"] listsWithNewLines = map (++ ["\n"]) $ permutations listofstrings mapM_ putStr (concat listsWithNewLines) 输出非常好。 我想将输出保存到文本文件中。 这是怎么回事?一个解决方案是将最后一行更改为: mapM_ (writeFile "filename

在使用执行字符串置换后

listofstrings= ["string1", "string2", "string3", "string4"]
listsWithNewLines = map (++ ["\n"]) $ permutations listofstrings
mapM_ putStr (concat listsWithNewLines)
输出非常好。 我想将输出保存到文本文件中。
这是怎么回事?

一个解决方案是将最后一行更改为:

mapM_ (writeFile "filename") $ concat listsWithNewLines
writeFile获取文件路径,并将作为第二个参数传递的字符串写入其中

更新:

您可以使用appendFile而不是writeFile。如果不使用,则每次放置新词时都会覆盖该文件:

let writeAndPrint word = appendFile "filename" word >> putStr word
mapM_ writeAndPrint $ concat listsWithNewLines
>>是排序一元计算的运算符。正如@chi指出的,您可以在Haskell文件中重写它,比如print和write.hs,如下所示:

main = do
  let listofstrings= ["string1", "string2", "string3", "string4"]
  let listsWithNewLines = map (++ ["\n"]) $ permutations listofstrings
  let writeAndPrint word = do
    appendFile "filename" word
    putStr word
  mapM_ writeAndPrint $ concat listsWithNewLines

之后,您可以将其加载到GHCi中,或者使用GHC编译程序并在控制台上执行。如果您在GHCi中加载它,您应该使用:load printAndWrite.hs,然后运行main。

要循环列表并执行一元操作,您可以使用

foo = do
   ...
   let action string = do
          writeFile "filename" string
          putStrLn ("written: " ++ string)
          ...
   mapM_ action $ concat listsWithNewLines
或者,对于Data.Foldable,您可以遵循以下习惯用法:

foo = do
   ...
   for_ (concat listsWithNewLines) $ \string -> do
          writeFile "filename" string
          putStrLn ("written: " ++ string)
          ...

谢谢你。但当我停止命令时,文件为0。如何在cli上查看输出详细信息?它可以与putStr结合吗?@foxxx刚刚用一个更完整的解决方案编辑了这篇文章,不过我建议你看一看Haskell教程来学习基础知识。谢谢@nicodp和chi。这解释了很多。现在我可以运行它了。命令排列排列整个数组还是?或者它也能给我连续的string1string2吗?在36MB的结果文件之后,我的系统崩溃了。我怎样才能在nicodp冲水?谢谢你,chi。你能告诉我如何把这个复杂的代码放到一个文件里吗?到目前为止,我已经把每一行都放在了ghci的狂欢节上。一个接一个haskell文件如何测试代码?@foxxx创建一个文本文件,并将其扩展名设为.hs。将模块Foo放在文件开头的位置,然后在下面粘贴您想要的任何定义。您可以使用ghci filenamehere.hs加载它