{-# LANGUAGE TypeSynonymInstances #-} module Data.GenericString where import Data.String import Data.Word (Word8) import qualified Data.ByteString.Char8 as BS import qualified Data.ByteString.Lazy.Char8 as LS import Safe (readMay) class (IsString t) => Str t where readToMaybeStr :: Read b => t -> Maybe b showToStr :: Show b => b -> t appendStr :: t -> t -> t foldrStr :: (Char -> b -> b) -> b -> t -> b strToString :: t -> String instance Str String where readToMaybeStr = readMay showToStr = show appendStr = (++) foldrStr = foldr strToString = id instance Str BS.ByteString where readToMaybeStr = readMay . BS.unpack showToStr = BS.pack . show appendStr = BS.append foldrStr = BS.foldr strToString = BS.unpack instance Str LS.ByteString where readToMaybeStr = readMay . LS.unpack showToStr = LS.pack . show appendStr = LS.append foldrStr = LS.foldr strToString = LS.unpack