module TPDB.Data.Identifier where import qualified Data.Text as T import Data.Typeable import Data.Hashable data Identifier = Identifier { Identifier -> Int _identifier_hash :: !Int , Identifier -> Text name :: !T.Text , Identifier -> Int arity :: Int } deriving ( Identifier -> Identifier -> Bool (Identifier -> Identifier -> Bool) -> (Identifier -> Identifier -> Bool) -> Eq Identifier forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a $c== :: Identifier -> Identifier -> Bool == :: Identifier -> Identifier -> Bool $c/= :: Identifier -> Identifier -> Bool /= :: Identifier -> Identifier -> Bool Eq, Eq Identifier Eq Identifier => (Identifier -> Identifier -> Ordering) -> (Identifier -> Identifier -> Bool) -> (Identifier -> Identifier -> Bool) -> (Identifier -> Identifier -> Bool) -> (Identifier -> Identifier -> Bool) -> (Identifier -> Identifier -> Identifier) -> (Identifier -> Identifier -> Identifier) -> Ord Identifier Identifier -> Identifier -> Bool Identifier -> Identifier -> Ordering Identifier -> Identifier -> Identifier forall a. Eq a => (a -> a -> Ordering) -> (a -> a -> Bool) -> (a -> a -> Bool) -> (a -> a -> Bool) -> (a -> a -> Bool) -> (a -> a -> a) -> (a -> a -> a) -> Ord a $ccompare :: Identifier -> Identifier -> Ordering compare :: Identifier -> Identifier -> Ordering $c< :: Identifier -> Identifier -> Bool < :: Identifier -> Identifier -> Bool $c<= :: Identifier -> Identifier -> Bool <= :: Identifier -> Identifier -> Bool $c> :: Identifier -> Identifier -> Bool > :: Identifier -> Identifier -> Bool $c>= :: Identifier -> Identifier -> Bool >= :: Identifier -> Identifier -> Bool $cmax :: Identifier -> Identifier -> Identifier max :: Identifier -> Identifier -> Identifier $cmin :: Identifier -> Identifier -> Identifier min :: Identifier -> Identifier -> Identifier Ord, Typeable ) instance Hashable Identifier where hashWithSalt :: Int -> Identifier -> Int hashWithSalt Int _ = Identifier -> Int _identifier_hash instance Show Identifier where show :: Identifier -> String show = Text -> String T.unpack (Text -> String) -> (Identifier -> Text) -> Identifier -> String forall b c a. (b -> c) -> (a -> b) -> a -> c . Identifier -> Text name mk :: Int -> T.Text -> Identifier mk :: Int -> Text -> Identifier mk Int a Text n = Identifier { _identifier_hash :: Int _identifier_hash = (Int, Text) -> Int forall a. Hashable a => a -> Int hash (Int a,Text n) , arity :: Int arity = Int a, name :: Text name = Text n }