|
AltData.Typeable | Portability | portable | Stability | experimental | Maintainer | libraries@haskell.org |
|
|
|
|
|
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 |
|
class Typeable a where | | | cast :: (Typeable a, Typeable b) => a -> Maybe b | | gcast :: (Typeable a, Typeable b) => c a -> Maybe (c b) | | data TypeRep | | data TyCon | | mkTyCon :: String -> TyCon | | mkTyConApp :: TyCon -> [TypeRep] -> TypeRep | | mkAppTy :: TypeRep -> TypeRep -> TypeRep | | mkFunTy :: TypeRep -> TypeRep -> TypeRep | | splitTyConApp :: TypeRep -> (TyCon, [TypeRep]) | | funResultTy :: TypeRep -> TypeRep -> Maybe TypeRep | | typeRepTyCon :: TypeRep -> TyCon | | typeRepArgs :: TypeRep -> [TypeRep] | | tyConString :: TyCon -> String | | 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)) | | gcast2 :: (Typeable2 t, Typeable2 t') => c (t a b) -> Maybe (c (t' a b)) | | typeOfDefault :: (Typeable1 t, Typeable a) => t a -> TypeRep | | typeOf1Default :: (Typeable2 t, Typeable a) => t a b -> TypeRep | | typeOf2Default :: (Typeable3 t, Typeable a) => t a b c -> TypeRep | | typeOf3Default :: (Typeable4 t, Typeable a) => t a b c d -> TypeRep | | typeOf4Default :: (Typeable5 t, Typeable a) => t a b c d e -> TypeRep | | typeOf5Default :: (Typeable6 t, Typeable a) => t a b c d e f -> TypeRep | | typeOf6Default :: (Typeable7 t, Typeable a) => t a b c d e f g -> TypeRep |
|
|
|
The Typeable class
|
|
class Typeable a where |
The class Typeable allows a concrete representation of a type to
be calculated.
| | Methods | typeOf :: a -> TypeRep | Takes a value of type a and returns a concrete representation
of that type. The value of the argument should be ignored by
any instance of Typeable, so that it is safe to pass undefined as
the argument.
|
| | Instances | |
|
|
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 |
A concrete representation of a (monomorphic) type. TypeRep
supports reasonably efficient equality.
equality of keys doesn't work for dynamically loaded code, so we
revert back to canonical type names.
could use packed strings here.
| Instances | |
|
|
data TyCon |
An abstract representation of a type constructor. TyCon objects can
be built using mkTyCon.
| Instances | |
|
|
Construction of type representations
|
|
mkTyCon |
:: String | the name of the type constructor (should be unique
in the program, so it might be wise to use the
fully qualified name).
| -> TyCon | A unique TyCon object
| Builds a TyCon object representing a type constructor. An
implementation of Data.Typeable should ensure that the following holds:
mkTyCon "a" == mkTyCon "a"
|
|
|
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: Just u if the
first argument represents a function of type t -> 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 |
Variant for unary type constructors
| | Methods | | | Instances | |
|
|
class Typeable2 t where |
Variant for binary type constructors
| | Methods | | | Instances | |
|
|
class Typeable3 t where |
Variant for 3-ary type constructors
| | Methods | | | Instances | |
|
|
class Typeable4 t where |
Variant for 4-ary type constructors
| | Methods | | | Instances | |
|
|
class Typeable5 t where |
Variant for 5-ary type constructors
| | Methods | | | Instances | |
|
|
class Typeable6 t where |
Variant for 6-ary type constructors
| | Methods | typeOf6 :: t a b c d e f -> TypeRep |
| | Instances | |
|
|
class Typeable7 t where |
Variant for 7-ary type constructors
| | Methods | typeOf7 :: t a b c d e f g -> TypeRep |
| | Instances | |
|
|
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 |