将字符串输出保存到文件

时间:2018-01-28 07:54:58

标签: haskell

使用

执行字符串排列后
listofstrings= ["string1", "string2", "string3", "string4"]
listsWithNewLines = map (++ ["\n"]) $ permutations listofstrings
mapM_ putStr (concat listsWithNewLines)

输出非常好。 我想将输出保存到文本文件。 怎么可能有用?

2 个答案:

答案 0 :(得分:4)

To" loop"在列表上执行monadic动作,你可以使用

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)
          ...

答案 1 :(得分:3)

一种解决方案可能是将您的最后一行更改为:

mapM_ (writeFile "filename") $ concat listsWithNewLines

writeFile接受文件路径并将作为第二个参数传递的字符串写入其中。

<强>更新

您可以使用writeFile而不是使用appendFile(如果没有,则每次放入新单词时都会覆盖该文件):

let writeAndPrint word = appendFile "filename" word >> putStr word
mapM_ writeAndPrint $ concat listsWithNewLines

>>是测序monadic计算的运算符。正如@chi指出的那样,你可以在Haskell文件中重写它,比如说,printAndWrite.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