lambdasound-1.0.0: src/Data/SomeStableName.hs
module Data.SomeStableName where
import Data.Hashable
import GHC.StableName
import Control.Monad.IO.Class
data SomeStableName = forall a. SomeStableName (StableName a)
instance Eq SomeStableName where
(SomeStableName sn1) == (SomeStableName sn2) = sn1 `eqStableName` sn2
instance Hashable SomeStableName where
hashWithSalt salt (SomeStableName sn) = salt * hashStableName sn
hash (SomeStableName sn) = hashStableName sn
makeSomeStableName :: MonadIO m => a -> m SomeStableName
makeSomeStableName = liftIO . fmap SomeStableName . makeStableName
instance Show SomeStableName where
show (SomeStableName sn) = "SomeStableName (" ++ show (hashStableName sn) ++ ")"