
Daniel,
On Wed, Apr 27, 2011 at 2:41 PM, Daniel Fischer
I'm not sure that alone would help. I think he'll still get a thunk (M.alter f slot (M.alter f slot (... ())).
record would need to force the Map, easiest to make Distrib strict in the map,
data Distrib n = Distrib !(M.Map (Range n Int)) [Range n]
Another point is that he uses a foldr, which generally is a bad strategy for building Maps, much better to use foldl' in general.
The bang and the foldl' made it super fast (1 sec) and extra stack is no longer required. After searching a bit on my own I had a feeling that the problem has with the call to M.alter, but I didn't know how to force the evaluation. For me this is the biggest problem with using Haskell on a day-to-day basis for work stuff (which I usually do in Perl or even BASH). It takes me longer to write the program and it (sometimes) takes longer for the program to run. I suppose with practice I'll get better... Thanks for the tips, Patrick -- ===================== Patrick LeBoutillier Rosemère, Québec, Canada