module Data.SmallString
( SmallString
, fromString
, toString
) where
import qualified Data.SmallArray as A
import qualified Codec.Binary.UTF8.String as UTF8
import Data.Word (Word8)
import Control.DeepSeq
newtype SmallString = SmallString (A.Array Word8)
instance Eq SmallString where
(==) = eqSmallString
instance Ord SmallString where
compare = compareSmallString
instance Show SmallString where
show = show . toString
instance NFData SmallString where
rnf (SmallString arr) = rnf arr
compareSmallString :: SmallString -> SmallString -> Ordering
compareSmallString (SmallString lhsAry) (SmallString rhsAry)
= compare lhsAry rhsAry
eqSmallString :: SmallString -> SmallString -> Bool
eqSmallString (SmallString lhs) (SmallString rhs)
= lhs == rhs
fromString :: String -> SmallString
fromString
= SmallString . A.fromList . UTF8.encode
toString :: SmallString -> String
toString (SmallString ary)
= UTF8.decode . A.toList $ ary