[Haskell-cafe] Structural sharing in haskell data structures?

Duncan Coutts duncan.coutts at worc.ox.ac.uk
Thu May 14 10:17:08 EDT 2009


On Thu, 2009-05-14 at 09:03 -0400, Jan-Willem Maessen wrote:

> Hmm, I think neither of the data structures you name actually support  
> both O(lg n) indexing and O(lg n) cons or append.  That said, your  
> point is well taken, so let's instead state it as a challenge:
> 
> Can you, oh Haskellers, implement a fast, wide-fanout (say >= 8) tree- 
> based sequence implementation in Haskell, which supports at-least-log- 
> time indexing and at-least-log-time cons with a large base for the  
> logarithm?  Can you do it without turning off array bounds checking  
> (either by using unsafe operations or low-level peeking and poking)  
> and without using an algebraic data type with O(f) constructors for  
> fanout of f?  You can turn off bounds checks if your program encodes  
> static guarantees that indices cannot be out of bounds (there are a  
> couple of libraries to do this).

Can we motivate the restriction of not using multiple constructors? If
we're only talking about a fanout of 8 then it doesn't look like a
problem. It sounds like you're really asking for an array but without
wanting to say so explicitly. Perhaps you should ask for a variable
fanout or a fanout of something bigger like 32 (and presumably these
requirements could be justified too?).

Duncan



More information about the Haskell-Cafe mailing list