HsJudy-0.2: Data/Array/Judy/HashIO.hs
{-# LANGUAGE MagicHash, FlexibleInstances, OverlappingInstances,IncoherentInstances,
IncoherentInstances, UndecidableInstances #-}
module Data.Array.Judy.HashIO (
HashIO (..),
UniqueHashIO, -- (..),
ReversibleHashIO (..)
) where
import Data.HashTable (hashString)
import Data.Array.Judy.Private
import GHC.Exts (unsafeCoerce#)
class HashIO a where
-- Two step conversion, first from a -> Int then Int -> Value
hashIO :: a -> IO Value
class HashIO a => UniqueHashIO a
class UniqueHashIO a => ReversibleHashIO a where
-- Two step conversion, first from Value -> Int then Int -> a
unHashIO :: Value -> IO a
instance Enum a => UniqueHashIO a where
instance Enum a => HashIO a where
hashIO = return . unsafeCoerce# . fromEnum
instance Enum a => ReversibleHashIO a where
unHashIO = return . toEnum . unsafeCoerce#
instance HashIO Value where
hashIO = return
instance UniqueHashIO Value
instance ReversibleHashIO Value where
unHashIO = return
instance HashIO Integer where
hashIO = return . fromIntegral . hashString . show