首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将跟踪重定向到文件?

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

Stack Overflow用户
提问于 2014-11-09 03:19:12
回答 1查看 224关注 0票数 0

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

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

我使用的是Windows。

EN

回答 1

Stack Overflow用户

发布于 2014-11-09 03:35:03

请,请,请使用IO

原则上,您可以通过使用unsafePerformIO :: IO a -> a来完成这一恶行,但这是一种非常非常糟糕的错误,而且您很容易陷入危险之中。

这实际上就是Debug.Trace如何做到这一点的--这是Debug.Trace.trace的源代码

代码语言:javascript
复制
{-# NOINLINE trace #-}
trace :: String -> a -> a
trace string expr = unsafePerformIO $ do
    traceIO string
    return expr

请注意,NOINLINE杂注实际上很重要--否则GHC可能会在多个地方内联您的调用,并复制您隐藏的效果。

不过,如果您只使用IO monad,您肯定不会那么头疼。如果你只是在写东西,就像我想象的那样,你也可以使用一个Writer String,然后把输出写到文件中。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26821067

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档