[Haskell-beginners] Re: A better way?

Heinrich Apfelmus apfelmus at quantentunnel.de
Sun Feb 22 09:34:49 EST 2009


Patrick LeBoutillier wrote:
> Hi,
> 
> I changed my code to :
> 
> maxTableColumnWidths :: [[String]] -> [Int]
> maxTableColumnWidths = foldl' rowMax zeros
>   where rowMax = zipWith (\m f -> max (length f) m)
>         zeros = 0 : zeros
> 
> but it still blows the stack. I don't understand why. Doesn't foldl'
> force the evaluation of each call to rowMax? If so then I don't see
> what causes the stack to get so big... unless I'm looking in the wrong
> place...
> 
> Can anyone shed some light?

It does force the evaluation of each call to  rowMax  but only to weak
head normal form. In other words, it will only evaluate the list to
either a cons cell or an empty list

   blah   --->  blah : blah
           \->  []

See also

    http://en.wikibooks.org/wiki/Haskell/Graph_reduction


Regards,
apfelmus

--
http://apfelmus.nfshost.com



More information about the Beginners mailing list