
19 Oct
2011
19 Oct
'11
4:13 p.m.
On Wed, Oct 19, 2011 at 12:21 PM, Gregory Collins
On Wed, Oct 19, 2011 at 5:03 PM, Johan Tibell
wrote: It does. You need to use evaluate to have ensure actually be evaluated.
I'm almost certain you're wrong about this. The bang pattern on the return from ensure (!r1 <- ensure $ ...) forces r1 to WHNF, which goes through deepseq, and thus the whole list is forced. See https://gist.github.com/1299380 for a short counterexample.
I should have paid more attention; I missed the bangs on the bindings. I still recommend the pattern I linked in my previous email. If you want to do it they way you currently do use let !foo = xs `deepseq` xs no return needed.