{-# LANGUAGE TypeSynonymInstances, FlexibleInstances #-} module Database.TokyoCabinet.FDB.Key (Key(..), ID(..)) where import Database.TokyoCabinet.FDB.C (ID(..), unID) import Data.Int import Data.Word class Key a where toID :: a -> ID fromID :: ID -> a instance Key Int where toID = ID . fromIntegral fromID = fromIntegral . unID instance Key Int8 where toID = ID . fromIntegral fromID = fromIntegral . unID instance Key Int16 where toID = ID . fromIntegral fromID = fromIntegral . unID instance Key Int32 where toID = ID . fromIntegral fromID = fromIntegral . unID instance Key Int64 where toID = ID fromID = fromIntegral . unID instance Key Word8 where toID = ID . fromIntegral fromID = fromIntegral . unID instance Key Word16 where toID = ID . fromIntegral fromID = fromIntegral . unID instance Key Word32 where toID = ID . fromIntegral fromID = fromIntegral . unID instance Key Word64 where toID = ID . fromIntegral fromID = fromIntegral . unID instance Key ID where toID = id fromID = id instance Key String where toID "min" = IDMIN toID "max" = IDMAX toID "prev" = IDPREV toID "next" = IDNEXT toID idstr = ID (read idstr) fromID = show . unID