There is for debugging
 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 is evil and only for debugging.
Remember that due to lazy evaluation, the debug output may appear in unexpected order and alternates with the output that the program usually generates.
FROM
 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 was expected.