On Tue, Feb 22, 2011 at 6:28 PM, Louis Wasserman
<[email protected]> wrote:
> Apologies!

Accepted. :)

> I was, in point of fact, working on such a patch, but I think I've been
> convinced that it's a legitimate position for a package to take.  (I'm also
> curious, Johann, about the approach you figured out that didn't cost a word
> per node!)

I'm working on a patch that provides O(1) size right now. The trick is
to define HashMap as:

data HashMap k v = HM {-# UNPACK #-} !Int !(Tree k v)

data Tree k v
    = Nil
    | Tip {-# UNPACK #-} !Hash
          {-# UNPACK #-} !(FL.FullList k v)
    | Bin {-# UNPACK #-} !Prefix
          {-# UNPACK #-} !Mask
          !(Tree k v)
          !(Tree k v)

And have insert, delete, and other operations that change the size
return both the updated tree and the size delta (-1, 0, or 1 in the
case of insert/delete). The size delta is then applied to the stored
size.

At the moment I'm trying to figure out the performance impact of
making this change.

Johan

_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to