Data.Typeable

base-4.10.1.0: Basic libraries

Copyright | (c) The University of Glasgow CWI 2001--2004
License | BSD-style (see the file libraries/base/LICENSE)
Maintainer | libraries@haskell.org
Stability | experimental
Portability | portable
Safe Haskell | Trustworthy
Language | Haskell2010

Data.Typeable

Contents

- The Typeable class
- Propositional equality
- Type-safe cast
- Generalized casts for higher-order kinds
- A canonical proxy type
- Type representations
- Observing type representations
- Type constructors
- For backwards compatibility

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.Data uses Typeable and type-safe cast (but not dynamics) to support the "Scrap your boilerplate" style of generic programming.

## Compatibility Notes

Since GHC 8.2, GHC has supported type-indexed type representations. Data.Typeable provides type representations which are qualified over this index, providing an interface very similar to the Typeable notion seen in previous releases. For the type-indexed interface, see Type.Reflection.

Since GHC 7.8, `Typeable` is poly-kinded. The changes required for this might break some old programs involving `Typeable`. More details on this, including how to fix your code, can be found on the PolyTypeable wiki page

Synopsis

- class Typeable (a :: k)
- typeOf :: forall a. Typeable a => a -> TypeRep
- typeRep :: forall proxy a. Typeable a => proxy a -> TypeRep
- data a :~: b where
  - Refl :: a :~: a
- data (a :: k1) :~~: (b :: k2) where
  - HRefl :: a :~~: a
- cast :: forall a b. (Typeable a, Typeable b) => a -> Maybe b
- eqT :: forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
- gcast :: forall a b c. (Typeable a, Typeable b) => c a -> Maybe (c b)
- gcast1 :: forall c t t' a. (Typeable t, Typeable t') => c (t a) -> Maybe (c (t' a))
- gcast2 :: forall c t t' a b. (Typeable t, Typeable t') => c (t a b) -> Maybe (c (t' a b))
- data Proxy t = Proxy
- type TypeRep = SomeTypeRep
- rnfTypeRep :: TypeRep -> ()
- showsTypeRep :: TypeRep -> ShowS
- mkFunTy :: TypeRep -> TypeRep -> TypeRep
- funResultTy :: TypeRep -> TypeRep -> Maybe TypeRep
- splitTyConApp :: TypeRep -> (TyCon, [TypeRep])
- typeRepArgs :: TypeRep -> [TypeRep]
- typeRepTyCon :: TypeRep -> TyCon
- typeRepFingerprint :: TypeRep -> Fingerprint
- data TyCon :: *
- tyConPackage :: TyCon -> String
- tyConModule :: TyCon -> String
- tyConName :: TyCon -> String
- rnfTyCon :: TyCon -> ()
- tyConFingerprint :: TyCon -> Fingerprint
- typeOf1 :: forall t (a :: *). Typeable t => t a -> TypeRep
- typeOf2 :: forall t (a :: *) (b :: *). Typeable t => t a b -> TypeRep
- typeOf3 :: forall t (a :: *) (b :: *) (c :: *). Typeable t => t a b c -> TypeRep
- typeOf4 :: forall t (a :: *) (b :: *) (c :: *) (d :: *). Typeable t => t a b c d -> TypeRep
- typeOf5 :: forall t (a :: *) (b :: *) (c :: *) (d :: *) (e :: *). Typeable t => t a b c d e -> TypeRep
- typeOf6 :: forall t (a :: *) (b :: *) (c :: *) (d :: *) (e :: *) (f :: *). Typeable t => t a b c d e f -> TypeRep
- typeOf7 :: forall t (a :: *) (b :: *) (c :: *) (d :: *) (e :: *) (f :: *) (g :: *). Typeable t => t a b c d e f g -> TypeRep
- type Typeable1 (a :: * -> *) = Typeable a
- type Typeable2 (a :: * -> * -> *) = Typeable a
- type Typeable3 (a :: * -> * -> * -> *) = Typeable a
- type Typeable4 (a :: * -> * -> * -> * -> *) = Typeable a
- type Typeable5 (a :: * -> * -> * -> * -> * -> *) = Typeable a
- type Typeable6 (a :: * -> * -> * -> * -> * -> * -> *) = Typeable a
- type Typeable7 (a :: * -> * -> * -> * -> * -> * -> * -> *) = Typeable a

# The Typeable class

class Typeable (a :: k) Source #

The class `Typeable` allows a concrete representation of a type to be calculated.

Minimal complete definition

typeRep#

typeOf :: forall a. Typeable a => a -> TypeRep Source #

Observe a type representation for the type of a value.

typeRep :: forall proxy a. Typeable a => proxy a -> TypeRep Source #

Takes a value of type `a` and returns a concrete representation of that type.

Since: 4.7.0.0

# Propositional equality

data a :~: b where infix 4 Source #

Propositional equality. If `a :~: b` is inhabited by some terminating value, then the type `a` is the same as the type `b`. To use this equality in practice, pattern-match on the `a :~: b` to get out the `Refl` constructor; in the body of the pattern-match, the compiler knows that `a ~ b`.

Since: 4.7.0.0

Constructors

Refl :: a :~: a |

Instances

Category k ((:~:) k) # | Since: 4.7.0.0
Methods id :: cat a a Source # (.) :: cat b c -> cat a b -> cat a c Source #
TestEquality k ((:~:) k a) # | Since: 4.7.0.0
Methods testEquality :: f a -> f b -> Maybe (((k :~: a) :~: a) b) Source #
TestCoercion k ((:~:) k a) # | Since: 4.7.0.0
Methods testCoercion :: f a -> f b -> Maybe (Coercion (k :~: a) a b) Source #
(~) k a b => Bounded ((:~:) k a b) # | Since: 4.7.0.0
Methods minBound :: (k :~: a) b Source # maxBound :: (k :~: a) b Source #
(~) k a b => Enum ((:~:) k a b) # | Since: 4.7.0.0
Methods succ :: (k :~: a) b -> (k :~: a) b Source # pred :: (k :~: a) b -> (k :~: a) b Source # toEnum :: Int -> (k :~: a) b Source # fromEnum :: (k :~: a) b -> Int Source # enumFrom :: (k :~: a) b -> [(k :~: a) b] Source # enumFromThen :: (k :~: a) b -> (k :~: a) b -> [(k :~: a) b] Source # enumFromTo :: (k :~: a) b -> (k :~: a) b -> [(k :~: a) b] Source # enumFromThenTo :: (k :~: a) b -> (k :~: a) b -> (k :~: a) b -> [(k :~: a) b] Source #
Eq ((:~:) k a b) # |
Methods (==) :: (k :~: a) b -> (k :~: a) b -> Bool Source # (/=) :: (k :~: a) b -> (k :~: a) b -> Bool Source #
((~) * a b, Data a) => Data ((:~:) * a b) # | Since: 4.7.0.0
Methods gfoldl :: (forall d c. Data d => c (d -> c) -> d -> c c) -> (forall g. g -> c g) -> (* :~: a) b -> c ((* :~: a) b) Source # gunfold :: (forall c r. Data c => c (c -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c ((* :~: a) b) Source # toConstr :: (* :~: a) b -> Constr Source # dataTypeOf :: (* :~: a) b -> DataType Source # dataCast1 :: Typeable (* -> *) t => (forall d. Data d => c (t d)) -> Maybe (c ((* :~: a) b)) Source # dataCast2 :: Typeable (* -> * -> *) t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c ((* :~: a) b)) Source # gmapT :: (forall c. Data c => c -> c) -> (* :~: a) b -> (* :~: a) b Source # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> (* :~: a) b -> r Source # gmapQr :: (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> (* :~: a) b -> r Source # gmapQ :: (forall d. Data d => d -> u) -> (* :~: a) b -> [u] Source # gmapQi :: Int -> (forall d. Data d => d -> u) -> (* :~: a) b -> u Source # gmapM :: Monad m => (forall d. Data d => d -> m d) -> (* :~: a) b -> m ((* :~: a) b) Source # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> (* :~: a) b -> m ((* :~: a) b) Source # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> (* :~: a) b -> m ((* :~: a) b) Source #
Ord ((:~:) k a b) # |
Methods compare :: (k :~: a) b -> (k :~: a) b -> Ordering Source # (<) :: (k :~: a) b -> (k :~: a) b -> Bool Source # (<=) :: (k :~: a) b -> (k :~: a) b -> Bool Source # (>) :: (k :~: a) b -> (k :~: a) b -> Bool Source # (>=) :: (k :~: a) b -> (k :~: a) b -> Bool Source # max :: (k :~: a) b -> (k :~: a) b -> (k :~: a) b Source # min :: (k :~: a) b -> (k :~: a) b -> (k :~: a) b Source #
(~) k a b => Read ((:~:) k a b) # | Since: 4.7.0.0
Methods readsPrec :: Int -> ReadS ((k :~: a) b) Source # readList :: ReadS [(k :~: a) b] Source # readPrec :: ReadPrec ((k :~: a) b) Source # readListPrec :: ReadPrec [(k :~: a) b] Source #
Show ((:~:) k a b) # |
Methods showsPrec :: Int -> (k :~: a) b -> ShowS Source # show :: (k :~: a) b -> String Source # showList :: [(k :~: a) b] -> ShowS Source #

data (a :: k1) :~~: (b :: k2) where infix 4 Source #

Kind heterogeneous propositional equality. Like '(:~:)', `a :~~: b` is inhabited by a terminating value if and only if `a` is the same type as `b`.

Since: 4.10.0.0

Constructors

HRefl :: a :~~: a |

Instances

Category k ((:~~:) k k) # | Since: 4.10.0.0
Methods id :: cat a a Source # (.) :: cat b c -> cat a b -> cat a c Source #
TestEquality k ((:~~:) k1 k a) # | Since: 4.10.0.0
Methods testEquality :: f a -> f b -> Maybe (((k1 :~~: k) a :~: a) b) Source #
TestCoercion k ((:~~:) k1 k a) # | Since: 4.10.0.0
Methods testCoercion :: f a -> f b -> Maybe (Coercion ((k1 :~~: k) a) a b) Source #
(~~) k1 k2 a b => Bounded ((:~~:) k1 k2 a b) # | Since: 4.10.0.0
Methods minBound :: (k1 :~~: k2) a b Source # maxBound :: (k1 :~~: k2) a b Source #
(~~) k1 k2 a b => Enum ((:~~:) k1 k2 a b) # | Since: 4.10.0.0
Methods succ :: (k1 :~~: k2) a b -> (k1 :~~: k2) a b Source # pred :: (k1 :~~: k2) a b -> (k1 :~~: k2) a b Source # toEnum :: Int -> (k1 :~~: k2) a b Source # fromEnum :: (k1 :~~: k2) a b -> Int Source # enumFrom :: (k1 :~~: k2) a b -> [(k1 :~~: k2) a b] Source # enumFromThen :: (k1 :~~: k2) a b -> (k1 :~~: k2) a b -> [(k1 :~~: k2) a b] Source # enumFromTo :: (k1 :~~: k2) a b -> (k1 :~~: k2) a b -> [(k1 :~~: k2) a b] Source # enumFromThenTo :: (k1 :~~: k2) a b -> (k1 :~~: k2) a b -> (k1 :~~: k2) a b -> [(k1 :~~: k2) a b] Source #
Eq ((:~~:) k1 k2 a b) # | Since: 4.10.0.0
Methods (==) :: (k1 :~~: k2) a b -> (k1 :~~: k2) a b -> Bool Source # (/=) :: (k1 :~~: k2) a b -> (k1 :~~: k2) a b -> Bool Source #
(Typeable * i2, Typeable * j2, Typeable i2 a, Typeable j2 b, (~~) i2 j2 a b) => Data ((:~~:) i2 j2 a b) # | Since: 4.10.0.0
Methods gfoldl :: (forall d c. Data d => c (d -> c) -> d -> c c) -> (forall g. g -> c g) -> (i2 :~~: j2) a b -> c ((i2 :~~: j2) a b) Source # gunfold :: (forall c r. Data c => c (c -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c ((i2 :~~: j2) a b) Source # toConstr :: (i2 :~~: j2) a b -> Constr Source # dataTypeOf :: (i2 :~~: j2) a b -> DataType Source # dataCast1 :: Typeable (* -> *) t => (forall d. Data d => c (t d)) -> Maybe (c ((i2 :~~: j2) a b)) Source # dataCast2 :: Typeable (* -> * -> *) t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c ((i2 :~~: j2) a b)) Source # gmapT :: (forall c. Data c => c -> c) -> (i2 :~~: j2) a b -> (i2 :~~: j2) a b Source # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> (i2 :~~: j2) a b -> r Source # gmapQr :: (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> (i2 :~~: j2) a b -> r Source # gmapQ :: (forall d. Data d => d -> u) -> (i2 :~~: j2) a b -> [u] Source # gmapQi :: Int -> (forall d. Data d => d -> u) -> (i2 :~~: j2) a b -> u Source # gmapM :: Monad m => (forall d. Data d => d -> m d) -> (i2 :~~: j2) a b -> m ((i2 :~~: j2) a b) Source # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> (i2 :~~: j2) a b -> m ((i2 :~~: j2) a b) Source # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> (i2 :~~: j2) a b -> m ((i2 :~~: j2) a b) Source #
Ord ((:~~:) k1 k2 a b) # | Since: 4.10.0.0
Methods compare :: (k1 :~~: k2) a b -> (k1 :~~: k2) a b -> Ordering Source # (<) :: (k1 :~~: k2) a b -> (k1 :~~: k2) a b -> Bool Source # (<=) :: (k1 :~~: k2) a b -> (k1 :~~: k2) a b -> Bool Source # (>) :: (k1 :~~: k2) a b -> (k1 :~~: k2) a b -> Bool Source # (>=) :: (k1 :~~: k2) a b -> (k1 :~~: k2) a b -> Bool Source # max :: (k1 :~~: k2) a b -> (k1 :~~: k2) a b -> (k1 :~~: k2) a b Source # min :: (k1 :~~: k2) a b -> (k1 :~~: k2) a b -> (k1 :~~: k2) a b Source #
(~~) k1 k2 a b => Read ((:~~:) k1 k2 a b) # | Since: 4.10.0.0
Methods readsPrec :: Int -> ReadS ((k1 :~~: k2) a b) Source # readList :: ReadS [(k1 :~~: k2) a b] Source # readPrec :: ReadPrec ((k1 :~~: k2) a b) Source # readListPrec :: ReadPrec [(k1 :~~: k2) a b] Source #
Show ((:~~:) k1 k2 a b) # | Since: 4.10.0.0
Methods showsPrec :: Int -> (k1 :~~: k2) a b -> ShowS Source # show :: (k1 :~~: k2) a b -> String Source # showList :: [(k1 :~~: k2) a b] -> ShowS Source #

# Type-safe cast

cast :: forall a b. (Typeable a, Typeable b) => a -> Maybe b Source #

The type-safe cast operation

eqT :: forall a b. (Typeable a, Typeable b) => Maybe (a :~: b) Source #

Extract a witness of equality of two types

Since: 4.7.0.0

gcast :: forall a b c. (Typeable a, Typeable b) => c a -> Maybe (c b) Source #

A flexible variation parameterised in a type constructor

# Generalized casts for higher-order kinds

gcast1 :: forall c t t' a. (Typeable t, Typeable t') => c (t a) -> Maybe (c (t' a)) Source #

Cast over `k1 -> k2`

gcast2 :: forall c t t' a b. (Typeable t, Typeable t') => c (t a b) -> Maybe (c (t' a b)) Source #

Cast over `k1 -> k2 -> k3`

# A canonical proxy type

data Proxy t Source #

A concrete, poly-kinded proxy type

Constructors

Proxy |

Instances

Generic1 k (Proxy k) # |
Associated Types type Rep1 (Proxy k) (f :: Proxy k -> *) :: k -> * Source # Methods from1 :: f a -> Rep1 (Proxy k) f a Source # to1 :: Rep1 (Proxy k) f a -> f a Source #
Monad (Proxy *) # | Since: 4.7.0.0
Methods (>>=) :: Proxy * a -> (a -> Proxy * b) -> Proxy * b Source # (>>) :: Proxy * a -> Proxy * b -> Proxy * b Source # return :: a -> Proxy * a Source # fail :: String -> Proxy * a Source #
Functor (Proxy *) # | Since: 4.7.0.0
Methods fmap :: (a -> b) -> Proxy * a -> Proxy * b Source # (<$) :: a -> Proxy * b -> Proxy * a Source #
Applicative (Proxy *) # | Since: 4.7.0.0
Methods pure :: a -> Proxy * a Source # (<*>) :: Proxy * (a -> b) -> Proxy * a -> Proxy * b Source # liftA2 :: (a -> b -> c) -> Proxy * a -> Proxy * b -> Proxy * c Source # (*>) :: Proxy * a -> Proxy * b -> Proxy * b Source # (<*) :: Proxy * a -> Proxy * b -> Proxy * a Source #
Foldable (Proxy *) # | Since: 4.7.0.0
Methods fold :: Monoid m => Proxy * m -> m Source # foldMap :: Monoid m => (a -> m) -> Proxy * a -> m Source # foldr :: (a -> b -> b) -> b -> Proxy * a -> b Source # foldr' :: (a -> b -> b) -> b -> Proxy * a -> b Source # foldl :: (b -> a -> b) -> b -> Proxy * a -> b Source # foldl' :: (b -> a -> b) -> b -> Proxy * a -> b Source # foldr1 :: (a -> a -> a) -> Proxy * a -> a Source # foldl1 :: (a -> a -> a) -> Proxy * a -> a Source # toList :: Proxy * a -> [a] Source # null :: Proxy * a -> Bool Source # length :: Proxy * a -> Int Source # elem :: Eq a => a -> Proxy * a -> Bool Source # maximum :: Ord a => Proxy * a -> a Source # minimum :: Ord a => Proxy * a -> a Source # sum :: Num a => Proxy * a -> a Source # product :: Num a => Proxy * a -> a Source #
Traversable (Proxy *) # | Since: 4.7.0.0
Methods traverse :: Applicative f => (a -> f b) -> Proxy * a -> f (Proxy * b) Source # sequenceA :: Applicative f => Proxy * (f a) -> f (Proxy * a) Source # mapM :: Monad m => (a -> m b) -> Proxy * a -> m (Proxy * b) Source # sequence :: Monad m => Proxy * (m a) -> m (Proxy * a) Source #
MonadPlus (Proxy *) # | Since: 4.9.0.0
Methods mzero :: Proxy * a Source # mplus :: Proxy * a -> Proxy * a -> Proxy * a Source #
Alternative (Proxy *) # | Since: 4.9.0.0
Methods empty :: Proxy * a Source # (<|>) :: Proxy * a -> Proxy * a -> Proxy * a Source # some :: Proxy * a -> Proxy * [a] Source # many :: Proxy * a -> Proxy * [a] Source #
MonadZip (Proxy *) # | Since: 4.9.0.0
Methods mzip :: Proxy * a -> Proxy * b -> Proxy * (a, b) Source # mzipWith :: (a -> b -> c) -> Proxy * a -> Proxy * b -> Proxy * c Source # munzip :: Proxy * (a, b) -> (Proxy * a, Proxy * b) Source #
Show1 (Proxy *) # | Since: 4.9.0.0
Methods liftShowsPrec :: (Int -> a -> ShowS) -> ([a] -> ShowS) -> Int -> Proxy * a -> ShowS Source # liftShowList :: (Int -> a -> ShowS) -> ([a] -> ShowS) -> [Proxy * a] -> ShowS Source #
Read1 (Proxy *) # | Since: 4.9.0.0
Methods liftReadsPrec :: (Int -> ReadS a) -> ReadS [a] -> Int -> ReadS (Proxy * a) Source # liftReadList :: (Int -> ReadS a) -> ReadS [a] -> ReadS [Proxy * a] Source # liftReadPrec :: ReadPrec a -> ReadPrec [a] -> ReadPrec (Proxy * a) Source # liftReadListPrec :: ReadPrec a -> ReadPrec [a] -> ReadPrec [Proxy * a] Source #
Ord1 (Proxy *) # | Since: 4.9.0.0
Methods liftCompare :: (a -> b -> Ordering) -> Proxy * a -> Proxy * b -> Ordering Source #
Eq1 (Proxy *) # | Since: 4.9.0.0
Methods liftEq :: (a -> b -> Bool) -> Proxy * a -> Proxy * b -> Bool Source #
Bounded (Proxy k t) # |
Methods minBound :: Proxy k t Source # maxBound :: Proxy k t Source #
Enum (Proxy k s) # | Since: 4.7.0.0
Methods succ :: Proxy k s -> Proxy k s Source # pred :: Proxy k s -> Proxy k s Source # toEnum :: Int -> Proxy k s Source # fromEnum :: Proxy k s -> Int Source # enumFrom :: Proxy k s -> [Proxy k s] Source # enumFromThen :: Proxy k s -> Proxy k s -> [Proxy k s] Source # enumFromTo :: Proxy k s -> Proxy k s -> [Proxy k s] Source # enumFromThenTo :: Proxy k s -> Proxy k s -> Proxy k s -> [Proxy k s] Source #
Eq (Proxy k s) # | Since: 4.7.0.0
Methods (==) :: Proxy k s -> Proxy k s -> Bool Source # (/=) :: Proxy k s -> Proxy k s -> Bool Source #
Data t => Data (Proxy * t) # | Since: 4.7.0.0
Methods gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Proxy * t -> c (Proxy * t) Source # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c (Proxy * t) Source # toConstr :: Proxy * t -> Constr Source # dataTypeOf :: Proxy * t -> DataType Source # dataCast1 :: Typeable (* -> *) t => (forall d. Data d => c (t d)) -> Maybe (c (Proxy * t)) Source # dataCast2 :: Typeable (* -> * -> *) t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (Proxy * t)) Source # gmapT :: (forall b. Data b => b -> b) -> Proxy * t -> Proxy * t Source # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Proxy * t -> r Source # gmapQr :: (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Proxy * t -> r Source # gmapQ :: (forall d. Data d => d -> u) -> Proxy * t -> [u] Source # gmapQi :: Int -> (forall d. Data d => d -> u) -> Proxy * t -> u Source # gmapM :: Monad m => (forall d. Data d => d -> m d) -> Proxy * t -> m (Proxy * t) Source # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Proxy * t -> m (Proxy * t) Source # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Proxy * t -> m (Proxy * t) Source #
Ord (Proxy k s) # | Since: 4.7.0.0
Methods compare :: Proxy k s -> Proxy k s -> Ordering Source # (<) :: Proxy k s -> Proxy k s -> Bool Source # (<=) :: Proxy k s -> Proxy k s -> Bool Source # (>) :: Proxy k s -> Proxy k s -> Bool Source # (>=) :: Proxy k s -> Proxy k s -> Bool Source # max :: Proxy k s -> Proxy k s -> Proxy k s Source # min :: Proxy k s -> Proxy k s -> Proxy k s Source #
Read (Proxy k s) # | Since: 4.7.0.0
Methods readsPrec :: Int -> ReadS (Proxy k s) Source # readList :: ReadS [Proxy k s] Source # readPrec :: ReadPrec (Proxy k s) Source # readListPrec :: ReadPrec [Proxy k s] Source #
Show (Proxy k s) # | Since: 4.7.0.0
Methods showsPrec :: Int -> Proxy k s -> ShowS Source # show :: Proxy k s -> String Source # showList :: [Proxy k s] -> ShowS Source #
Ix (Proxy k s) # | Since: 4.7.0.0
Methods range :: (Proxy k s, Proxy k s) -> [Proxy k s] Source # index :: (Proxy k s, Proxy k s) -> Proxy k s -> Int Source # unsafeIndex :: (Proxy k s, Proxy k s) -> Proxy k s -> Int inRange :: (Proxy k s, Proxy k s) -> Proxy k s -> Bool Source # rangeSize :: (Proxy k s, Proxy k s) -> Int Source # unsafeRangeSize :: (Proxy k s, Proxy k s) -> Int
Generic (Proxy k t) # |
Associated Types type Rep (Proxy k t) :: * -> * Source # Methods from :: Proxy k t -> Rep (Proxy k t) x Source # to :: Rep (Proxy k t) x -> Proxy k t Source #
Semigroup (Proxy k s) # | Since: 4.9.0.0
Methods (<>) :: Proxy k s -> Proxy k s -> Proxy k s Source # sconcat :: NonEmpty (Proxy k s) -> Proxy k s Source # stimes :: Integral b => b -> Proxy k s -> Proxy k s Source #
Monoid (Proxy k s) # | Since: 4.7.0.0
Methods mempty :: Proxy k s Source # mappend :: Proxy k s -> Proxy k s -> Proxy k s Source # mconcat :: [Proxy k s] -> Proxy k s Source #
type Rep1 k (Proxy k) # |
type Rep1 k (Proxy k) = D1 k (MetaData "Proxy" "Data.Proxy" "base" False) (C1 k (MetaCons "Proxy" PrefixI False) (U1 k))
type Rep (Proxy k t) # |
type Rep (Proxy k t) = D1 * (MetaData "Proxy" "Data.Proxy" "base" False) (C1 * (MetaCons "Proxy" PrefixI False) (U1 *))

# Type representations

type TypeRep = SomeTypeRep Source #

A quantified type representation.

rnfTypeRep :: TypeRep -> () Source #

Force a `TypeRep` to normal form.

showsTypeRep :: TypeRep -> ShowS Source #

Show a type representation

mkFunTy :: TypeRep -> TypeRep -> TypeRep Source #

Build a function type.

# Observing type representations

funResultTy :: TypeRep -> TypeRep -> Maybe TypeRep Source #

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

splitTyConApp :: TypeRep -> (TyCon, [TypeRep]) Source #

Splits a type constructor application. Note that if the type constructor is polymorphic, this will not return the kinds that were used.

typeRepArgs :: TypeRep -> [TypeRep] Source #

Observe the argument types of a type representation

typeRepTyCon :: TypeRep -> TyCon Source #

Observe the type constructor of a quantified type representation.

typeRepFingerprint :: TypeRep -> Fingerprint Source #

Takes a value of type `a` and returns a concrete representation of that type.

Since: 4.7.0.0

# Type constructors

data TyCon :: * Source #

Instances

Eq TyCon |
Methods (==) :: TyCon -> TyCon -> Bool Source # (/=) :: TyCon -> TyCon -> Bool Source #
Ord TyCon |
Methods compare :: TyCon -> TyCon -> Ordering Source # (<) :: TyCon -> TyCon -> Bool Source # (<=) :: TyCon -> TyCon -> Bool Source # (>) :: TyCon -> TyCon -> Bool Source # (>=) :: TyCon -> TyCon -> Bool Source # max :: TyCon -> TyCon -> TyCon Source # min :: TyCon -> TyCon -> TyCon Source #
Show TyCon # | Since: 2.1
Methods showsPrec :: Int -> TyCon -> ShowS Source # show :: TyCon -> String Source # showList :: [TyCon] -> ShowS Source #

tyConPackage :: TyCon -> String Source #

tyConModule :: TyCon -> String Source #

tyConName :: TyCon -> String Source #

rnfTyCon :: TyCon -> () Source #

tyConFingerprint :: TyCon -> Fingerprint Source #

# For backwards compatibility

typeOf1 :: forall t (a :: *). Typeable t => t a -> TypeRep Source #

typeOf2 :: forall t (a :: *) (b :: *). Typeable t => t a b -> TypeRep Source #

typeOf3 :: forall t (a :: *) (b :: *) (c :: *). Typeable t => t a b c -> TypeRep Source #

typeOf4 :: forall t (a :: *) (b :: *) (c :: *) (d :: *). Typeable t => t a b c d -> TypeRep Source #

typeOf5 :: forall t (a :: *) (b :: *) (c :: *) (d :: *) (e :: *). Typeable t => t a b c d e -> TypeRep Source #

typeOf6 :: forall t (a :: *) (b :: *) (c :: *) (d :: *) (e :: *) (f :: *). Typeable t => t a b c d e f -> TypeRep Source #

typeOf7 :: forall t (a :: *) (b :: *) (c :: *) (d :: *) (e :: *) (f :: *) (g :: *). Typeable t => t a b c d e f g -> TypeRep Source #

type Typeable1 (a :: * -> *) = Typeable a Source #

Deprecated: renamed to `Typeable`

type Typeable2 (a :: * -> * -> *) = Typeable a Source #

Deprecated: renamed to `Typeable`

type Typeable3 (a :: * -> * -> * -> *) = Typeable a Source #

Deprecated: renamed to `Typeable`

type Typeable4 (a :: * -> * -> * -> * -> *) = Typeable a Source #

Deprecated: renamed to `Typeable`

type Typeable5 (a :: * -> * -> * -> * -> * -> *) = Typeable a Source #

Deprecated: renamed to `Typeable`

type Typeable6 (a :: * -> * -> * -> * -> * -> * -> *) = Typeable a Source #

Deprecated: renamed to `Typeable`

type Typeable7 (a :: * -> * -> * -> * -> * -> * -> * -> *) = Typeable a Source #

Deprecated: renamed to `Typeable`