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

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

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

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

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

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