Reputation: 1761
How can I print a list or something in haskell at every call for example :
funct a list = funct (a + 1) (a : list)
print list here ??????? but how ?
Upvotes: 6
Views: 1158
Reputation: 183883
For debugging, there's
import Debug.Trace
funct :: Integer -> [Integer] -> Bool
funct a list = trace (show list) $ funct (a + 1) (a : list)
where trace :: String -> a -> a
. It uses unsafePerformIO
under the hood, so it's evil and only for debugging.
Be aware that due to lazy evaluation, the debugging output may appear in surprising order and interleaved with the output the program would normally generate.
With
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)
I get
*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
as expected.
Upvotes: 11
Reputation: 21972
Same as Daniel Fisher suggested, but with unsafePerformIO
only.
> import System.IO.Unsafe
> let funct a list = unsafePerformIO $ do { print list; return $ funct (a + 1) (a : list) }
Take a look at the similar question describes what is really going on when you use unsafePerformIO
.
Upvotes: 1