是否可以在纯函数中打印跟踪日志,例如:
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