纯函数中的跟踪输出



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

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

我知道,这不是" Haskell Clean",但是GHC中没有任何有用的黑客吧?

用于调试,您可以使用Debug.Trace模块。

import Debug.Trace
pure :: Int -> Int
pure x = trace "log" (x * x)

请注意,由于懒惰,输出在某些情况下可以与您生成的其他输出相结合,因此不建议在生产代码中记录这一点,但是对于简单的调试任务,它通常很好。

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

import System.IO.Unsafe
pure :: Int -> Int
pure x = unsafePerformIO $ do
  print x
  return $ x*x

最新更新