| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

Description | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

The Note, only relevant if you use dynamic linking. If you have a program that is statically linked with Data.Typeable, and then dynamically link a program that also uses Data.Typeable, you'll get two copies of the module. That's fine, but behind the scenes, the module uses a mutable variable to allocate unique Ids to type constructors. So in the situation described, there'll be two separate Id allocators, which aren't comparable to each other. This can lead to chaos. (It's a bug that we will fix.) None of this matters if you aren't using dynamic linking. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

Synopsis | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

The Typeable class | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

class Typeable a where | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

Type-safe cast | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

cast :: (Typeable a, Typeable b) => a -> Maybe b | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

The type-safe cast operation | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

gcast :: (Typeable a, Typeable b) => c a -> Maybe (c b) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

A flexible variation parameterised in a type constructor | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

Type representations | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

data TypeRep | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

data TyCon | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

Construction of type representations | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

mkTyCon | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

mkTyConApp :: TyCon -> [TypeRep] -> TypeRep | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

Applies a type constructor to a sequence of types | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

mkAppTy :: TypeRep -> TypeRep -> TypeRep | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

Adds a TypeRep argument to a TypeRep. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

mkFunTy :: TypeRep -> TypeRep -> TypeRep | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

A special case of mkTyConApp, which applies the function
type constructor to a pair of types.
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

Observation of type representations | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

splitTyConApp :: TypeRep -> (TyCon, [TypeRep]) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

Splits a type constructor application | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

funResultTy :: TypeRep -> TypeRep -> Maybe TypeRep | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

Applies a type to a function type. Returns: if the
first argument represents a function of type Just ut -> u and the
second argument represents a function of type t. Otherwise,
returns Nothing.
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

typeRepTyCon :: TypeRep -> TyCon | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

Observe the type constructor of a type representation | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

typeRepArgs :: TypeRep -> [TypeRep] | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

Observe the argument types of a type representation | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

tyConString :: TyCon -> String | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

Observe string encoding of a type representation | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

The other Typeable classes | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

Note: The general instances are provided for GHC only.
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

class Typeable1 t where | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

class Typeable2 t where | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

class Typeable3 t where | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

class Typeable4 t where | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

class Typeable5 t where | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

class Typeable6 t where | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

class Typeable7 t where | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

gcast1 :: (Typeable1 t, Typeable1 t') => c (t a) -> Maybe (c (t' a)) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

Cast for * -> * | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

gcast2 :: (Typeable2 t, Typeable2 t') => c (t a b) -> Maybe (c (t' a b)) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

Cast for * -> * -> * | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

Default instances | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

Note: These are not needed by GHC, for which these instances
are generated by general instance declarations.
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

typeOfDefault :: (Typeable1 t, Typeable a) => t a -> TypeRep | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

For defining a Typeable instance from any Typeable1 instance.
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

typeOf1Default :: (Typeable2 t, Typeable a) => t a b -> TypeRep | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

For defining a Typeable1 instance from any Typeable2 instance.
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

typeOf2Default :: (Typeable3 t, Typeable a) => t a b c -> TypeRep | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

For defining a Typeable2 instance from any Typeable3 instance.
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

typeOf3Default :: (Typeable4 t, Typeable a) => t a b c d -> TypeRep | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

For defining a Typeable3 instance from any Typeable4 instance.
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

typeOf4Default :: (Typeable5 t, Typeable a) => t a b c d e -> TypeRep | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

For defining a Typeable4 instance from any Typeable5 instance.
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

typeOf5Default :: (Typeable6 t, Typeable a) => t a b c d e f -> TypeRep | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

For defining a Typeable5 instance from any Typeable6 instance.
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

typeOf6Default :: (Typeable7 t, Typeable a) => t a b c d e f g -> TypeRep | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

For defining a Typeable6 instance from any Typeable7 instance.
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

Produced by Haddock version 0.7 |