ConcurrentUtils-0.5.0.0: Control/CUtils/Dyn.hs
{-# LANGUAGE Safe, ExistentialQuantification, DeriveDataTypeable #-}
module Control.CUtils.Dyn (Dyn, value, makeDyn, determineType) where
import Data.Typeable
data Dyn = forall t. (Eq t, Show t, Typeable t) => Dyn t deriving Typeable
value :: (Typeable t) => Dyn -> Maybe t
value (Dyn x) = cast x
makeDyn :: (Eq t, Show t, Typeable t) => t -> Dyn
makeDyn = Dyn
determineType :: Dyn -> TypeRep
determineType (Dyn x) = typeOf x
instance Eq Dyn where
-- A notion of equality at multiple types considers two values to be equal
-- iff they have the same type, and are equal according to the equality test
-- at such type.
Dyn x1 == Dyn x2 = maybe False(==x2) (cast x1)
instance Show Dyn where
-- Show instance passes through to that of the underlying type.
showsPrec prec (Dyn x) = showsPrec prec x