-- Copyright © 2011 National Institute of Aerospace / Galois, Inc.

{-# LANGUAGE ExistentialQuantification #-}
{-# LANGUAGE Safe                      #-}

module System.Mem.StableName.Dynamic
  ( DynStableName(..)
  , hashDynStableName
  , makeDynStableName
  ) where

import System.Mem.StableName (StableName, eqStableName, makeStableName,
                              hashStableName)

data DynStableName = forall a . DynStableName (StableName a)

makeDynStableName :: a -> IO DynStableName
makeDynStableName :: forall a. a -> IO DynStableName
makeDynStableName a
x =
  do
    StableName a
stn <- forall a. a -> IO (StableName a)
makeStableName a
x
    forall (m :: * -> *) a. Monad m => a -> m a
return (forall a. StableName a -> DynStableName
DynStableName StableName a
stn)

hashDynStableName :: DynStableName -> Int
hashDynStableName :: DynStableName -> Int
hashDynStableName (DynStableName StableName a
sn) = forall a. StableName a -> Int
hashStableName StableName a
sn

instance Eq DynStableName where
  DynStableName StableName a
sn1 == :: DynStableName -> DynStableName -> Bool
== DynStableName StableName a
sn2 = forall a b. StableName a -> StableName b -> Bool
eqStableName StableName a
sn1 StableName a
sn2