{-#LANGUAGE MultiParamTypeClasses #-}
module Text.Parcom.ByteString.Lazy
where

import Prelude hiding (head, null, tail)
import Data.ByteString.Lazy
import Data.Word8
import Text.Parcom.Stream
import Text.Parcom.Word8
import qualified Data.ByteString.Lazy.UTF8 as UTF8

instance Stream ByteString Word8 where
    peek = head
    atEnd = null
    consume = tail

instance Listish ByteString Word8 where
    toList = unpack
    fromList = pack

instance Textish ByteString where
    peekChar s =
        case UTF8.decode s of
            Just ('\65533', _) -> (Nothing, 0)
            Nothing -> (Nothing, 0)
            Just (c, n) -> (Just c, fromIntegral n)