-- |
-- Create a new reference.
-- 
-- Two references created from the same value are not guaranteed to be equal or
-- produce the same hash. 
-- However the references created from different values are guaranteed
-- to be different.
new :: a -> IO (HashRef a)
new a = do
  sn <- makeStableName a
  return $ HashRef sn a

-- |
-- Extract the value from this reference.
new :: a -> IO (HashRef a)
new a = do
  sn <- makeStableName a
  return $ HashRef sn a

-- |
-- Extract the value from this reference.
new a = do
  sn <- makeStableName a
  return $ HashRef sn a

-- |
-- Extract the value from this reference.