我是Haskell的新手。
我很难将命令结果从GHCi输出到文件。我想知道是否有人可以给我一个简单的解释如何做到这一点?到目前为止我在网上找到的例子似乎过于复杂。
答案 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]
您可以将此文件写入此文件:
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
,但我对此并不了解。 (如果你知道如何做到这一点,你当然可以自动生成日志文件,如果它不存在的话。)