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 StableName a sn1) == :: SomeStableName -> SomeStableName -> Bool == (SomeStableName StableName a sn2) = StableName a sn1 StableName a -> StableName a -> Bool forall a b. StableName a -> StableName b -> Bool `eqStableName` StableName a sn2 instance Hashable SomeStableName where hashWithSalt :: Int -> SomeStableName -> Int hashWithSalt Int salt (SomeStableName StableName a sn) = Int salt Int -> Int -> Int forall a. Num a => a -> a -> a * StableName a -> Int forall a. StableName a -> Int hashStableName StableName a sn hash :: SomeStableName -> Int hash (SomeStableName StableName a sn) = StableName a -> Int forall a. StableName a -> Int hashStableName StableName a sn makeSomeStableName :: MonadIO m => a -> m SomeStableName makeSomeStableName :: forall (m :: * -> *) a. MonadIO m => a -> m SomeStableName makeSomeStableName = IO SomeStableName -> m SomeStableName forall a. IO a -> m a forall (m :: * -> *) a. MonadIO m => IO a -> m a liftIO (IO SomeStableName -> m SomeStableName) -> (a -> IO SomeStableName) -> a -> m SomeStableName forall b c a. (b -> c) -> (a -> b) -> a -> c . (StableName a -> SomeStableName) -> IO (StableName a) -> IO SomeStableName forall a b. (a -> b) -> IO a -> IO b forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b fmap StableName a -> SomeStableName forall a. StableName a -> SomeStableName SomeStableName (IO (StableName a) -> IO SomeStableName) -> (a -> IO (StableName a)) -> a -> IO SomeStableName forall b c a. (b -> c) -> (a -> b) -> a -> c . a -> IO (StableName a) forall a. a -> IO (StableName a) makeStableName instance Show SomeStableName where show :: SomeStableName -> String show (SomeStableName StableName a sn) = String "SomeStableName (" String -> ShowS forall a. [a] -> [a] -> [a] ++ Int -> String forall a. Show a => a -> String show (StableName a -> Int forall a. StableName a -> Int hashStableName StableName a sn) String -> ShowS forall a. [a] -> [a] -> [a] ++ String ")"