removeColors :: ByteString -> ByteString
removeColors bss = rebuildC (length bss) f bss where
    f '^' xs | Just (x2, xs2) <- uncons xs
             , isAlphaNum x2
             , Just (x3, xs3) <- uncons xs2
             = f x3 xs3
    f x xs   = (toLower x, xs)
removeColors :: ByteString -> ByteString
removeColors bss = rebuildC (length bss) f bss where
    f '^' xs | Just (x2, xs2) <- uncons xs
             , isAlphaNum x2
             , Just (x3, xs3) <- uncons xs2
             = f x3 xs3
    f x xs   = (toLower x, xs)
removeColors bss = rebuildC (length bss) f bss where
    f '^' xs | Just (x2, xs2) <- uncons xs
             , isAlphaNum x2
             , Just (x3, xs3) <- uncons xs2
             = f x3 xs3
    f x xs   = (toLower x, xs)