On Friday 03 September 2010 12:28:43, Jan Christiansen wrote: > Hi, > > On 03.09.2010, at 01:32, Daniel Fischer wrote: > > No surprise, there aren't many 'รค's in Shakespeare's works, are there? > > nope > > > On the other hand, the current implementation of lines does not seem > > to > > suffer from Wadler's tuple space leak (according to one test I > > made), so > > I'd stick with the current implementation for the time being. > > Well, I think it does.
Indeed. I botched my test, allowing it to drop the reference to the first line too early by not using enough of it, so although lines shows the leak, let { ds1_s1ts :: ([Char], [Char]) LclId ds1_s1ts = case $wbreak @ Char lvl_r1uj wild_B1 of _ { (# ww1_anp, ww2_anq #) -> (ww1_anp, ww2_anq) } } in : @ String (case ds1_s1ts of _ { (l_aij, _) -> l_aij }) (case ds1_s1ts of _ { (_, s'_ail) -> case s'_ail of _ { , I managed to conceal it. > But obviously one can argue that this is a rare application. Yes. Ordinarily, lines in text files aren't longer than a few hundred characters, leaking those, who cares? But. Occasionally, long lines occur, and avoiding the space leak seems more important to me than having lines (_|_ : _|_) = _|_ : _|_ instead of lines (_|_ : _|_) = _|_ > Hopefully I haven't made a mistake here? No. > > By accident I stumbled across an odd behaviour. If I use the following > definition and replace all occurrences of break by break' in the > program above the memory behaviour is bad if I compile it without > profiling. But if I compile the program with -prof -auto-all the > program runs in constant space. Is this a known behaviour? I can't reproduce that. For me, it leaks also with profiling. > > break' :: (a -> Bool) -> [a] -> ([a],[a]) > break' p xs = (ys,zs) > where > (ys,zs) = break p xs > > Cheers, Jan _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe