Thanks for your help. It's more clear now.
> The value is not being evaluated by STM at all, as your STM functions
> don't need the value. In your program is evaluating when you print
> the answer in the main thread, as printing requires the value of the
> computation. If you didn't print, nothing would be computed at all.
> Lazy =).
Does it means that the value is computed by the "caller", based on the thunk, and not by the worker itself?
In this case, in this specific example, it would mean that this program does not exploit the parallelism at all (except using deepseq or seq).
I understand the principles (lazy evaluation, thunk,...) , but I'm surprised that no work has been done to "solve" this problem (in the sense that it's not intuitive to write concurrent programs in this context).