bos: > Jason Dagit wrote: > > >I think, given my simple algorithm that means that (==) for > >ByteStrings is slower than (==) for String. Is this possible? > > Yes indeed. Over ByteStrings, (==) is implemented as a call to memcmp. > For small strings, this loses by a large margin because it has to go > through the FFI. >
Yes, a non-memcmp version can sometimes be profitably used here. Something like this Core: eq !n (Ptr p) (Ptr q) = inlinePerformIO $ IO $ go n p q where go !n p q s | n == 0 = (# s , True #) | otherwise = case readInt8OffAddr# p 0# s of (# s, a #) -> case readInt8OffAddr# q 0# s of (# s, b #) | a /=# b -> (# s, False #) | otherwise -> go (n-1) (plusAddr# p 1#) (plusAddr# q 1#) s Ok, so that's not Core, but it could be ;) -- Don _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe