4

次のような純粋関数でトレースログを出力することはどういうわけか可能ですか?

pure :: Int -> Int
pure x = do
  <trace log>
  return x*x

「Haskellclean」ではありませんが、GHCに役立つハックはありませんか?

4

2 に答える 2

13

Debug.Traceデバッグには、モジュールを使用できます。

import Debug.Trace

pure :: Int -> Int
pure x = trace "log" (x * x)

怠惰のために、出力が生成している他の出力と混ざり合う場合があることに注意してください。したがって、これは本番コードへのログインにはお勧めできませんが、単純なデバッグタスクの場合は通常は問題ありません。

于 2012-11-07T08:39:26.083 に答える
1

もちろん、常にありunsafePerformIOます。ここで使用するのは良い考えではありません!

import System.IO.Unsafe

pure :: Int -> Int
pure x = unsafePerformIO $ do
  print x
  return $ x*x
于 2012-11-07T08:42:28.210 に答える