module Data.Interned.Internal.Text
( InternedText(..)
) where
import Data.String
import Data.Interned
import Data.Text
import Data.Hashable
data InternedText = InternedText
{ internedTextId :: !Id
, uninternedText :: !Text
}
instance IsString InternedText where
fromString = intern . pack
instance Eq InternedText where
InternedText i _ == InternedText j _ = i == j
instance Ord InternedText where
compare (InternedText i _) (InternedText j _) = compare i j
instance Show InternedText where
showsPrec d (InternedText _ b) = showsPrec d b
instance Interned InternedText where
type Uninterned InternedText = Text
newtype Description InternedText = DT Text deriving (Eq)
describe = DT
identify = InternedText
cache = itCache
instance Uninternable InternedText where
unintern (InternedText _ b) = b
instance Hashable (Description InternedText) where
hashWithSalt s (DT h) = hashWithSalt s h
itCache :: Cache InternedText
itCache = mkCache