On Mon, 2009-09-14 at 14:24 +0100, Simon Marlow wrote: > The workaround is to use this idiom instead: > > do > p <- return $! ... > return (p, q) Isn't the better idiom to use evaluate? let p = ... evaluate p return (p, q) When p is the only result it collapses to just let p = ... evaluate p Duncan