I made really time consuming algorithm which produces a short string as the result. When I try to print it (via putStrLn) it appears on the screen character by character. I did understand why that happened, and I tried to force evaluation of the string before actual printing.
myPrint !str = putStrLn str
But this help very little. When I ran the program in debug I noticed that the !str forced evaluation only for the first character.
Does anyone know why is that, and how to deal with this?
(!)translates intoseq, which evaluates strictly to Weak Head Normal Form -- that is, it only evaluates to the outermost constructor. To evaluate more deeply, you need a "deep" form ofseq.This is known as
deepseq.It is in the deepseq package.