UTF-8 6 , , 1, 2,... , 6- , , O (1):
import Data.Text as Text
import Data.Text.Encoding as Text
import Data.ByteString as BS
splitUtf8 :: ByteString -> (Char, ByteString)
splitUtf8 bs = go 1
where
go n | BS.null slack = (Text.head t, bs')
| otherwise = go (n + 1)
where
(bs1, bs') = BS.splitAt n bs
Some t slack _ = Text.streamDecodeUtf8 bs1
, 2 + 3- ByteString:
*SO_40414452> splitUtf8 $ BS.pack[197, 145, 226, 138, 162]
('\337',"\226\138\162")
3 + 2-:
*SO_40414452> splitUtf8 $ BS.pack[226, 138, 162, 197, 145]
('\8866',"\197\145")