如何将跟踪重定向到文件?

时间:2014-11-08 19:19:12

标签: haskell

我面临的问题是我需要以某种方式将trace的控制台输出重定向到文件,因为结果非常大。

我知道它原则上是一个隐藏的副作用,但我不想使用IO - Monad。

我正在使用Windows。

1 个答案:

答案 0 :(得分:5)

请,请使用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 pragma实际上非常重要 - 否则GHC可能会在多个位置内联您的调用并复制您从中隐藏的效果。


如果你只使用IO monad,那么你肯定会有一点头痛。如果你只是在编写东西,正如我想象的那样,你也可以使用Writer String,然后将输出写入文件。

相关问题