[Haskell-beginners] Understanding program stack usage

Felipe Almeida Lessa felipe.lessa at gmail.com
Wed Apr 27 17:20:15 CEST 2011


On Wed, Apr 27, 2011 at 11:52 AM, Patrick LeBoutillier
<patrick.leboutillier at gmail.com> wrote:
> How do I figure out why the program needs a lot of stack?

Usually it is because you are building a large thunk.

> Also, is there an easy way to increace performance?

Getting rid of the thunks should increase performance as well.

I've had just a quick look on your code, but here are some suggestions:

> record :: (Ord n) => n -> Distrib n -> Distrib n
> record n (Distrib m rs) = Distrib (M.alter f slot m) rs
>  where f (Just n) = Just $ n + 1
>        f Nothing = Just 1
>        slot = findSlot n rs
>        findSlot x (r@(Range a b):rs)
>          | x >= a && x < b = r
>          | otherwise       = findSlot x rs
>        findSlot x []       = OutOfBounds

Try changing "Just $ n + 1" to "Just $! n + 1".  It is possible that
this change alone removes the leak (it is the only obvious leak I'm
seeing right now).

Also, for findSlot you may want to do a binary search, but that isn't
related to the leak at all.

Cheers,

-- 
Felipe.



More information about the Beginners mailing list