4

是否可以在纯函数中打印跟踪日志,例如:

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

我知道,这不是“Haskell clean”,但 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 回答