{-# LANGUAGE ForeignFunctionInterface #-} module PackedString ( PackedString, packString, unpackPS, ) where import Data.Binary import Data.Generics import Data.Monoid import GHC.Exts import qualified Data.ByteString as BS import qualified Data.ByteString.UTF8 as BSU newtype PackedString = PS BS.ByteString deriving(Typeable,Binary,Eq,Ord,Monoid,Data) instance Show PackedString where showsPrec p ps r = showsPrec p (unpackPS ps) r -- | Convert a 'String' into a 'PackedString' packString :: String -> PackedString packString str = PS (BSU.fromString str) unpackPS :: PackedString -> String unpackPS (PS bs) = BSU.toString bs instance IsString PackedString where fromString = packString