
"Creighton Hogg"
So as another step in my education, I wanted to ask if the following code at least feels 'morally' correct as a find/replace function, replacing each occurrence of the sub-list before with after in the list.
Besides not using head, tail and isPrefixOf I would write it the same, except that I'd write it like this: -->8 import Data.ByteString.Lazy.Char8 as B import Prelude as P cut = let f _ s [] = [s] f n s (x:xs) = let (h,t) = B.splitAt (x - n) s in h:f x t xs in f 0 replace before@(b:_) after this = let before' = B.pack before after' = B.pack after f s | B.tail before' `B.isPrefixOf` B.tail s = B.append after' $ B.drop (B.length before') s | otherwise = s in B.concat $ P.map f $ cut this $ B.elemIndices b this main = B.interact $ replace "th" "s" -->8 As we all love benchmarks so dearly, here are the times: ./replace < /usr/share/dict/words > /dev/null 1.29s user 0.02s system 87% cpu 1.498 total ./replace < /usr/share/dict/words > /dev/null 0.25s user 0.02s system 84% cpu 0.313 total -- (c) this sig last receiving data processing entity. Inspect headers for copyright history. All rights reserved. Copying, hiring, renting, performance and/or broadcasting of this signature prohibited.