{-# OPTIONS_HADDOCK not-home #-}
--------------------------------------------------------------------
-- |
-- Copyright :  © Edward Kmett 2010-2014, Johan Kiviniemi 2013
-- License   :  BSD3
-- Maintainer:  Edward Kmett <ekmett@gmail.com>
-- Stability :  experimental
-- Portability: non-portable
--
--------------------------------------------------------------------
module Ersatz.Internal.StableName
  ( StableName
  , makeStableName'
  ) where

import System.Mem.StableName (StableName, makeStableName)
import Unsafe.Coerce (unsafeCoerce)

makeStableName' :: a -> IO (StableName ())
makeStableName' :: forall a. a -> IO (StableName ())
makeStableName' a
a = a
a seq :: forall a b. a -> b -> b
`seq` forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap forall a. StableName a -> StableName ()
coerceStableName (forall a. a -> IO (StableName a)
makeStableName a
a)
  where
    coerceStableName :: StableName a -> StableName ()
    coerceStableName :: forall a. StableName a -> StableName ()
coerceStableName = forall a b. a -> b
unsafeCoerce