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

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

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

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

The Typeable class reifies types to some extent by associating type
representations to types. These type representations can be compared,
and one can in turn define a type-safe cast operation. To this end,
an unsafe cast is guarded by a test for type (representation)
equivalence. The module Data.Dynamic uses Typeable for an
implementation of dynamics. The module Data.Generics uses Typeable
and type-safe cast (but not dynamics) to support the "Scrap your
boilerplate" style of generic programming.
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

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

showsTypeRep :: TypeRep -> ShowS | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

typeRepKey :: TypeRep -> IO Int | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

Returns a unique integer associated with a It is in the | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

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.8 |