0
我面临的问题是我需要以某种方式将trace
的控制台输出重定向到一个文件,因为结果非常大。如何将跟踪重定向到文件?
我知道它原则上有一个隐藏的副作用,但我不想使用IO
-Monad。
我正在使用Windows。
我面临的问题是我需要以某种方式将trace
的控制台输出重定向到一个文件,因为结果非常大。如何将跟踪重定向到文件?
我知道它原则上有一个隐藏的副作用,但我不想使用IO
-Monad。
我正在使用Windows。
请请用IO
。
可以,原则上,通过使用unsafePerformIO :: IO a -> a
完成这一恶行,但它是一个可怕的,可怕的罪,你容易在运行的古怪。
它实际上Debug.Trace
如何做到这一点 - 这里是为Debug.Trace.trace
来源:
{-# NOINLINE trace #-}
trace :: String -> a -> a
trace string expr = unsafePerformIO $ do
traceIO string
return expr
注意,NOINLINE
编译实际上是很重要的 - 否则GHC可能会内联您的呼叫在多个地方和复制的效果,你已经隐藏起来了。
你一定会拥有更小的头痛后,不过,如果你只需要使用IO
单子。如果你只写东西,就像我想象的那样,你也可以用Writer String
脱身,然后将输出写入文件。
OP表示输出会很大,所以我不会使用'Writer String'。 – ErikR 2014-11-08 19:46:08
如果你想[流式记录](http://www.haskellforall.com/2014/02/streaming-logging.html),你可以使用'pipes'中的'Producer' – 2014-11-09 04:04:29