Data.Typeable.Internal

base-4.9.0.0: Basic libraries

Copyright | (c) The University of Glasgow, CWI 2001--2011
License | BSD-style (see the file libraries/base/LICENSE)
Safe Haskell | Trustworthy
Language | Haskell2010

Data.Typeable.Internal

Contents

- Typeable class
- Module
- TyCon
- TypeRep

Description

The representations of the types TyCon and TypeRep, and the function mkTyCon which is used by derived instances of Typeable to construct a TyCon.

Synopsis

- data Proxy t = Proxy
- data Fingerprint = Fingerprint !Word64 !Word64
- typeOf :: forall a. Typeable a => a -> TypeRep
- 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
- data Module :: *
- moduleName :: Module -> String
- modulePackage :: Module -> String
- data TyCon :: *
- tyConPackage :: TyCon -> String
- tyConModule :: TyCon -> String
- tyConName :: TyCon -> String
- tyConString :: TyCon -> String
- tyConFingerprint :: TyCon -> Fingerprint
- mkTyCon3 :: String -> String -> String -> TyCon
- mkTyCon3# :: Addr# -> Addr# -> Addr# -> TyCon
- rnfTyCon :: TyCon -> ()
- data TypeRep = TypeRep !Fingerprint TyCon [KindRep] [TypeRep]
- type KindRep = TypeRep
- typeRep :: forall proxy a. Typeable a => proxy a -> TypeRep
- mkTyConApp :: TyCon -> [TypeRep] -> TypeRep
- mkPolyTyConApp :: TyCon -> [KindRep] -> [TypeRep] -> TypeRep
- mkAppTy :: TypeRep -> TypeRep -> TypeRep
- typeRepTyCon :: TypeRep -> TyCon
- class Typeable a where
- mkFunTy :: TypeRep -> TypeRep -> TypeRep
- splitTyConApp :: TypeRep -> (TyCon, [TypeRep])
- splitPolyTyConApp :: TypeRep -> (TyCon, [KindRep], [TypeRep])
- funResultTy :: TypeRep -> TypeRep -> Maybe TypeRep
- typeRepArgs :: TypeRep -> [TypeRep]
- typeRepFingerprint :: TypeRep -> Fingerprint
- rnfTypeRep :: TypeRep -> ()
- showsTypeRep :: TypeRep -> ShowS
- typeRepKinds :: TypeRep -> [KindRep]
- typeSymbolTypeRep :: KnownSymbol a => Proxy# a -> TypeRep
- typeNatTypeRep :: KnownNat a => Proxy# a -> TypeRep

# Documentation

data Proxy t #

A concrete, poly-kinded proxy type

Constructors

Proxy |

Instances

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

data Fingerprint #

Constructors

Fingerprint !Word64 !Word64 |

Instances

Eq Fingerprint # |
Methods (==) :: Fingerprint -> Fingerprint -> Bool Source # (/=) :: Fingerprint -> Fingerprint -> Bool Source #
Ord Fingerprint # |
Methods compare :: Fingerprint -> Fingerprint -> Ordering Source # (<) :: Fingerprint -> Fingerprint -> Bool Source # (<=) :: Fingerprint -> Fingerprint -> Bool Source # (>) :: Fingerprint -> Fingerprint -> Bool Source # (>=) :: Fingerprint -> Fingerprint -> Bool Source # max :: Fingerprint -> Fingerprint -> Fingerprint Source # min :: Fingerprint -> Fingerprint -> Fingerprint Source #
Show Fingerprint # |
Methods showsPrec :: Int -> Fingerprint -> ShowS # show :: Fingerprint -> String # showList :: [Fingerprint] -> ShowS #
Storable Fingerprint # |
Methods sizeOf :: Fingerprint -> Int # alignment :: Fingerprint -> Int # peekElemOff :: Ptr Fingerprint -> Int -> IO Fingerprint # pokeElemOff :: Ptr Fingerprint -> Int -> Fingerprint -> IO () # peekByteOff :: Ptr b -> Int -> IO Fingerprint # pokeByteOff :: Ptr b -> Int -> Fingerprint -> IO () # peek :: Ptr Fingerprint -> IO Fingerprint # poke :: Ptr Fingerprint -> Fingerprint -> IO () #

# Typeable class

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

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 #

Deprecated: renamed to `Typeable`

type Typeable2 a = Typeable a #

Deprecated: renamed to `Typeable`

type Typeable3 a = Typeable a #

Deprecated: renamed to `Typeable`

type Typeable4 a = Typeable a #

Deprecated: renamed to `Typeable`

type Typeable5 a = Typeable a #

Deprecated: renamed to `Typeable`

type Typeable6 a = Typeable a #

Deprecated: renamed to `Typeable`

type Typeable7 a = Typeable a #

Deprecated: renamed to `Typeable`

# Module

data Module :: * Source #

Instances

Show Module # |
Methods showsPrec :: Int -> Module -> ShowS # show :: Module -> String # showList :: [Module] -> ShowS #

moduleName :: Module -> String #

modulePackage :: Module -> String #

# TyCon

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 # |
Methods showsPrec :: Int -> TyCon -> ShowS # show :: TyCon -> String # showList :: [TyCon] -> ShowS #

tyConPackage :: TyCon -> String #

tyConModule :: TyCon -> String #

tyConName :: TyCon -> String #

tyConString :: TyCon -> String #

Deprecated: renamed to `tyConName`; `tyConModule` and `tyConPackage` are also available.

Observe string encoding of a type representation

tyConFingerprint :: TyCon -> Fingerprint #

mkTyCon3 #

Arguments

:: String | package name
-> String | module name
-> String | the name of the type constructor
-> TyCon | A unique `TyCon` object Used when the strings are dynamically allocated, eg from binary deserialisation

mkTyCon3# #

Arguments

:: Addr# | package name
-> Addr# | module name
-> Addr# | the name of the type constructor
-> TyCon | A unique `TyCon` object

rnfTyCon :: TyCon -> () #

# TypeRep

data TypeRep #

A concrete representation of a (monomorphic) type. `TypeRep` supports reasonably efficient equality.

Constructors

TypeRep !Fingerprint TyCon [KindRep] [TypeRep] |

Instances

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

type KindRep = TypeRep #

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

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

Since: 4.7.0.0

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

Applies a kind-monomorphic type constructor to a sequence of types

mkPolyTyConApp :: TyCon -> [KindRep] -> [TypeRep] -> TypeRep #

Applies a kind-polymorphic type constructor to a sequence of kinds and types

mkAppTy :: TypeRep -> TypeRep -> TypeRep #

Adds a TypeRep argument to a TypeRep.

typeRepTyCon :: TypeRep -> TyCon #

Observe the type constructor of a type representation

class Typeable a where #

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

Minimal complete definition

typeRep#

Methods

typeRep# :: Proxy# a -> TypeRep #

mkFunTy :: TypeRep -> TypeRep -> TypeRep #

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

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

Splits a type constructor application. Note that if the type constructor is polymorphic, this will not return the kinds that were used. See `splitPolyTyConApp` if you need all parts.

splitPolyTyConApp :: TypeRep -> (TyCon, [KindRep], [TypeRep]) #

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

typeRepArgs :: TypeRep -> [TypeRep] #

Observe the argument types of a type representation

typeRepFingerprint :: TypeRep -> Fingerprint #

Observe the `Fingerprint` of a type representation

Since: 4.8.0.0

rnfTypeRep :: TypeRep -> () #

Helper to fully evaluate `TypeRep` for use as `NFData(rnf)` implementation

Since: 4.8.0.0

showsTypeRep :: TypeRep -> ShowS #

typeRepKinds :: TypeRep -> [KindRep] #

Observe the argument kinds of a type representation

typeSymbolTypeRep :: KnownSymbol a => Proxy# a -> TypeRep #

Used to make ``Typeable` instance for things of kind Symbol

typeNatTypeRep :: KnownNat a => Proxy# a -> TypeRep #

Used to make ``Typeable` instance for things of kind Nat