concrete-typerep- Binary and Hashable instances for TypeRep



This module defines Binary and Hashable instances for TypeRep. These are defined on a newtype of TypeRep, namely ConcreteTypeRep, for two purposes:

  • to avoid making orphan instances
  • the Hashable instance for ConcreteTypeRep may not be pure enough for some people's tastes.

As usual with Typeable, this module will typically be used with some variant of Data.Dynamic. Two possible uses of this module are:



data ConcreteTypeRep Source

Abstract type providing the functionality of TypeRep, but additionally supporting hashing and serialization.

The Eq instance is just the Eq instance for TypeRep, so an analogous guarantee holds: cTypeOf a == cTypeOf b if and only if a and b have the same type. The hashing and serialization functions preserve this equality.


Eq ConcreteTypeRep 
Show ConcreteTypeRep 
Typeable ConcreteTypeRep 
Binary ConcreteTypeRep 
Hashable ConcreteTypeRep

This instance is guaranteed to be consistent for a single run of the program, but not for multiple runs.

cTypeOf :: Typeable a => a -> ConcreteTypeRepSource

"Concrete" version of typeOf.

toTypeRep :: ConcreteTypeRep -> TypeRepSource

Converts to the underlying TypeRep

fromTypeRep :: TypeRep -> ConcreteTypeRepSource

Converts from the underlying TypeRep