8

Haskellは初めてです。

GHCiからファイルにコマンド結果を出力するのに非常に苦労しています。誰かが私にこれを行う方法について簡単な説明をしてくれるかどうか疑問に思いましたか?私がこれまでオンラインで見つけた例は複雑すぎるようです。

4

2 に答える 2

7

あなたが関数を持っていて、あなたがしている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"

1行に1つの番号

次のように、数値ごとに1行ずつ出力できます。

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

として読み返します

ghci> fmap (map read.lines::String -> [Int]) $ readFile "myoutput'.txt"
于 2013-01-30T03:00:34.177 に答える
6

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でマルチラインサポートを追加するために使用します。

  • どうやら、を使用:lすると、で行ったすべてのインポートが削除ghci.confされるため、プレリュード関数に制限されます。Redditの投稿には、どういうわけか再定義できると書かれていますが:l、それについては何も知りません。(これを行う方法を知っている場合は、もちろん、ログファイルが存在しない場合は自動的に生成できます。)

于 2013-01-30T18:17:16.957 に答える