我是 Haskell 的新手。
我很难将 GHCi 的命令结果输出到文件中。我想知道是否有人可以给我一个简单的解释如何做到这一点?到目前为止,我在网上找到的示例似乎过于复杂。
假设你有一个函数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"
Reddit 上的这篇文章描述了如何为 GHCi 输出着色(GHC >= 7.6)。您可以指定一个日志功能,而不是漂亮的打印机。例如,将以下内容添加到您的.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 中添加多行支持。
显然, using:l
摆脱了您在 中所做的所有导入ghci.conf
,因此您仅限于 Prelude 功能。Reddit 帖子提到您可以以某种方式重新定义:l
,但我对此一无所知。(如果您知道如何执行此操作,当然可以在日志文件不存在时自动生成它。)