HMap-1.1.0: Data/Untypeable.hs
-----------------------------------------------------------------------------
-- |
-- Module : Data.HMap
-- Copyright : (c) Atze van der Ploeg 2013
-- License : BSD-style
-- Maintainer : atzeus@gmail.org
-- Stability : provisional
-- Portability : portable
--
-- Provides a Typeable-like interface for things that cannot derive typeable.
module Data.Untypeable(
Untypeable,
inject,
project)
where
import Data.HKeyPrivate
import Data.HideType
import Data.Unique
data Untypeable = Untypeable Unique HideType
-- | Make an Untypeable value
inject :: HKey s a -> a -> Untypeable
inject (Key x) a = Untypeable x (HideType a)
-- | Project (i.e. cast) an untypeable value with a given key.
project :: HKey s a -> Untypeable -> Maybe a
project (Key x) (Untypeable x' h)
| x == x' = Just $ unsafeFromHideType h
| otherwise = Nothing