from How does a stackless language work?
Haskell (as commonly implemented) does not have a call stack;
evaluation is based on graph reduction.
Really? That's interesting, because while I've never experienced it myself, I've read that if you don't use the strict versions of the fold functions and then force the evaluation of an infinite fold you get a stack overflow. Surely that indicates the presence of a stack. Can anyone clarify?