纯函数中的跟踪输出

时间:2012-11-07 08:30:19

标签: haskell ghc

在某种程度上可以在纯函数中打印跟踪日志,如:

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

我知道,这不是“Haskell干净”但GHC中没有任何有用的黑客攻击吗?

2 个答案:

答案 0 :(得分:13)

要进行调试,您可以使用Debug.Trace模块。

import Debug.Trace

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

请注意,由于懒惰,输出在某些情况下会与您正在生成的其他输出混合在一起,因此不建议用于登录生产代码,但对于简单的调试任务,它通常很好。

答案 1 :(得分:1)

当然,总有unsafePerformIO。并不是说在这里使用它是个好主意!

import System.IO.Unsafe

pure :: Int -> Int
pure x = unsafePerformIO $ do
  print x
  return $ x*x