{-# LANGUAGE FlexibleInstances #-}
module Text.NaturalComp.Stringy (Stringy (..)) where
import qualified Data.ByteString.UTF8 as U
import qualified Data.ByteString.Lazy.UTF8 as UL
import qualified Data.Text as T
import qualified Data.Text.Lazy as TL
class Stringy s where
uncons :: s -> Maybe (Char, s)
toString :: s -> String
instance Stringy [Char] where
uncons :: [Char] -> Maybe (Char, [Char])
uncons [] = Maybe (Char, [Char])
forall a. Maybe a
Nothing
uncons (Char
x:[Char]
xs) = (Char, [Char]) -> Maybe (Char, [Char])
forall a. a -> Maybe a
Just (Char
x, [Char]
xs)
toString :: [Char] -> [Char]
toString = [Char] -> [Char]
forall a. a -> a
id
instance Stringy U.ByteString where
uncons :: ByteString -> Maybe (Char, ByteString)
uncons = ByteString -> Maybe (Char, ByteString)
U.uncons
toString :: ByteString -> [Char]
toString = ByteString -> [Char]
U.toString
instance Stringy UL.ByteString where
uncons :: ByteString -> Maybe (Char, ByteString)
uncons = ByteString -> Maybe (Char, ByteString)
UL.uncons
toString :: ByteString -> [Char]
toString = ByteString -> [Char]
UL.toString
instance Stringy T.Text where
uncons :: Text -> Maybe (Char, Text)
uncons = Text -> Maybe (Char, Text)
T.uncons
toString :: Text -> [Char]
toString = Text -> [Char]
T.unpack
instance Stringy TL.Text where
uncons :: Text -> Maybe (Char, Text)
uncons = Text -> Maybe (Char, Text)
TL.uncons
toString :: Text -> [Char]
toString = Text -> [Char]
TL.unpack