On Sun, 2006-07-02 at 23:08 +0400, Bulat Ziganshin wrote:
> Hello Brian,
>
> Sunday, July 2, 2006, 10:58:29 PM, you wrote:
>
> > fromString :: String -> Atom
> > toString :: Atom -> String
>
> > instance Eq Atom
> > instance Ord Atom -- this is where things get difficult!
>
> i think that ByteString is a very strong candidate to Atom. `memicmp`
> is very fast operation, unless you plan to use really large strings
> with the same beginnings
and also equal lengths.
The nice thing about the ByteString representation is that we can use
the length to short-cut inequality and use equality of the pointers to
short-cut equality:
eq :: ByteString -> ByteString -> Bool
eq a@(PS p s l) b@(PS p' s' l')
| l /= l' = False -- short cut on length
| p == p' && s == s' = True -- short cut for the same string
| otherwise = compareBytes a b == EQ
So the worst case is long strings that compare equal but have different
memory blocks.
Duncan
_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe