如何在每次通话时打印列表或 haskell 中的内容,例如:
funct a list = funct (a + 1) (a : list)
print list here ??????? but how ?
如何在每次通话时打印列表或 haskell 中的内容,例如:
funct a list = funct (a + 1) (a : list)
print list here ??????? but how ?
对于调试,有
import Debug.Trace
funct :: Integer -> [Integer] -> Bool
funct a list = trace (show list) $ funct (a + 1) (a : list)
哪里trace :: String -> a -> a
。它unsafePerformIO
在引擎盖下使用,所以它是邪恶的,仅用于调试。
请注意,由于延迟评估,调试输出可能会以令人惊讶的顺序出现,并与程序通常生成的输出交错。
和
module TraceIt where
import Debug.Trace
funct :: Integer -> [Integer] -> Bool
funct 10 list = null list
funct a list = trace (show list) $ funct (a + 1) (a : list)
我明白了
*TraceIt> funct 1 []
[]
[1]
[2,1]
[3,2,1]
[4,3,2,1]
[5,4,3,2,1]
[6,5,4,3,2,1]
[7,6,5,4,3,2,1]
[8,7,6,5,4,3,2,1]
False
正如预期的那样。
与 Daniel Fisher 建议的相同,但unsafePerformIO
只有。
> import System.IO.Unsafe
> let funct a list = unsafePerformIO $ do { print list; return $ funct (a + 1) (a : list) }
看看类似的问题描述了你使用unsafePerformIO
.