[Haskell-beginners] Stack space overflow: using strict accumulator still fails

Daniel Fischer daniel.is.fischer at googlemail.com
Mon Oct 31 22:14:28 CET 2011


On Monday 31 October 2011, 10:36:53, Hugo Ferreira wrote:
> Hello,
> 
> Apologies for the late reply but I had to prep the code.
> 
> On 10/28/2011 09:43 AM, Daniel Fischer wrote:
> > On Thursday 27 October 2011, 17:02:46, Hugo Ferreira wrote:
> >> But something seems to be wrong here. If I do:
> >> 
> >> scoreRule_ r zs = Z.foldlz' (scoreElem r) (0, 0) zs
> >> 
> >>     where scoreElem r s z =
> >>     
> >>             let (nCorrect, nIncorrect) = s in
> >>             case ruleApplication r z of
> >>             
> >>               Just tag ->  if tag == correct
> >>               
> >>                           then (nCorrect+1, nIncorrect)
> >>                           else  (nCorrect, nIncorrect+1)
> >>               
> >>               Nothing  ->  (nCorrect, nIncorrect)
> >>             
> >>             where c = Z.cursor z
> >>             
> >>                   (correct,_) = c
> >> 
> >> it works correctly, however this does not work:
> >> 
> >> scoreRule_ r zs = Z.foldlz' (scoreElem r) (0, 0) zs
> >> 
> >>     where scoreElem r (!nCorrect, !nIncorrect) z =
> >>     
> >>             case ruleApplication r z of
> >>             
> >>               Just tag ->  if tag == correct
> >>               
> >>                           then (nCorrect+1, nIncorrect)
> >>                           else (nCorrect, nIncorrect+1)
> >>               
> >>               Nothing  ->  (nCorrect, nIncorrect)
> >>             
> >>             where c = Z.cursor z
> >>             
> >>                   (correct,_) = c
> >> 
> >> I have been staring at this for some time now, but cannot
> >> understand why it does not work. Any ideas?
> > 
> > No. Looks perfectly okay (well, the indentation is wrong, but that's
> > the same for the working version above and is probably due to the
> > mail client).
> 
> Not really. That's pretty much the indentation I am using. I actually
> had additional trace statements. Can you please tell me what's wrong?

You're not having the 'where's on their own lines ;)
Seriously: I hadn't bothered to view it in fixed-width font and 
underestimated how much my mail client compresses contiguous whitespace.

> 
> > Can you post the complete source for diagnosis?
> 
> I have attached the code + cabal files. I think that is all that is
> required. I am not sending the training data because it is too large
> (+7 Mega bytes). That is available at http://nlpwp.org/nlpwp-data.zip

Been a bugger to hunt down, but I finally found it.
The culprit is *drumroll, ba-dum tish*:
a one-character typo in Data.List.Zipper.
foldlz' isn't. The recursive call is to foldlz, not foldlz'.




More information about the Beginners mailing list