将Haskell GHCi命令结果输出到txt文件

时间:2013-01-30 02:56:42

标签: haskell

我是Haskell的新手。

我很难将命令结果从GHCi输出到文件。我想知道是否有人可以给我一个简单的解释如何做到这一点?到目前为止我在网上找到的例子似乎过于复杂。

2 个答案:

答案 0 :(得分:6)

假设你有一个函数mungeData并且你做了

 ghci> mungeData [1..5]
 [5,2,5,2,4,6,7,4,6,78,4,7,5,3,57,7,4,67,4,6,7,4,67,4]

WriteFile的

您可以将此文件写入此文件:

ghci> writeFile "myoutput.txt" (show (mungeData [1..5])

我倾向于写

ghci> writeFile "myoutput.txt" $ show $ mungeData [1..5]

摆脱几个括号。

中读回来

你可以使用

取回来
ghci> fmap (read::String -> [Int]) $ readFile "myoutput.txt"

每行一个号码

你可以输出一行每个数字:

ghci> writeFile "myoutput'.txt" $ unlines.map show $ mungeData [1..5]

的形式读回
ghci> fmap (map read.lines::String -> [Int]) $ readFile "myoutput'.txt"

答案 1 :(得分:6)

This post on Reddit描述了如何着色GHCi输出(GHC> = 7.6)。您可以指定日志记录功能,而不是使用prettyprinter。例如,将以下内容添加到.ghci.conf

:{
let logFile = "/home/david/.ghc/ghci.log"
    maxLogLength = 1024 -- max length of a single write
    logPrint x = appendFile logFile (take maxLogLength (show x) ++ "\n") >> print x
:}
:set -interactive-print=logPrint

这会将GHCi的输出记录到ghci.log

  • 日志文件必须已存在,否则appendFile会抱怨。您必须手动创建。

  • 它必须符合let声明,否则GHCi会拒绝它。使用:{ :}在GHCi中添加多行支持。

  • 显然,使用:l会删除您在ghci.conf中所做的所有导入,因此您只能使用Prelude功能。 Reddit帖子提到你可以以某种方式重新定义:l,但我对此并不了解。 (如果你知道如何做到这一点,你当然可以自动生成日志文件,如果它不存在的话。)