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 Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe