[Haskell-cafe] ANN: unordered-containers - a new, faster hashing-based containers library

wren ng thornton wren at freegeek.org
Fri Feb 25 00:49:57 CET 2011


On 2/24/11 3:05 AM, Joachim Breitner wrote:
> Hi,
>
> Am Mittwoch, den 23.02.2011, 20:06 -0500 schrieb wren ng thornton:
>> On 2/23/11 4:42 PM, Sterling Clover wrote:
>>> A quick grep of some of my own source reveals that I've used M.size and S.size only to test for sizes equal to 1. So, for my purposes at least, an O(1) isSingleton operation would be just as useful as an O(1) size.
>>
>> I agree, a fast isSingleton function would cover a very common use
>> case--- especially for set-like containers.
>
> would ghc’s rule system be strong enough to replace "size m == 1" by
> "isSingleton m"? It would be nice if programmers get the advantage even
> when they did not notice that a isSingleton function is provided.

Not really. I mean, yes, you could use rules for that; but it would be 
fragile and susceptible to breakage due to refactoring.

Since maps are finite, you shouldn't get any changes in the domain 
semantics (i.e., I believe that whether you hit bottom or not cannot 
change based on whether rules fire), but you could get asymptotic 
changes (since size is O(n) times whatever loop you're in) and you can 
get memory leak changes as well (depending on whether CSE fires or not). 
For me, allowing that much semantic variability based on whether rules 
fire or not is unacceptable. This is why I disabled the rewrite rules in 
Data.List.Extras.LazyLength[1] (which, granted, is even worse since 
infinite lists means that you can get domain semantic differences as well).

I'd rather advocate for having smart/lazy size comparison functions like 
Data.List.LazyLength offers, advertising them well, and then relying on 
users to say what they mean.


[1] 
http://hackage.haskell.org/packages/archive/list-extras/0.4.0.1/doc/html/Data-List-Extras-LazyLength.html

-- 
Live well,
~wren



More information about the Haskell-Cafe mailing list