Data.Typeable
| Авторское право | (c) Университет Глазго CWI 2001--2004 |
|---|---|
| Лицензия | В стиле BSD (см. файл libraries/base/LICENSE) |
| Сопровождающий | libraries@haskell.org |
| Стабильность | стабильная |
| Переносимость | переносимый |
| Безопасный Haskell | Safe |
| Язык | Haskell2010 |
Описание
Класс Typeable в некоторой степени реифицирует типы, связывая представления типов с типами. Эти представления типов можно сравнивать, что позволяет определить типобезопасную операцию приведения. Для этого небезопасное приведение защищено проверкой эквивалентности типов (представлений типов). Модуль Data.Dynamic использует Typeable для реализации динамических значений. Модуль Data.Data использует Typeable и типобезопасное приведение (но не динамические значения) для поддержки стиля обобщённого программирования «Scrap your boilerplate».
Примечания о совместимости
Начиная с GHC 8.2, GHC поддерживает представления типов с индексированием по типу. Data.Typeable предоставляет представления типов, параметризованные этим индексом, и интерфейс, очень похожий на понятие Typeable, использовавшееся в предыдущих выпусках. Описание интерфейса с индексированием по типу см. в Type.Reflection.
Начиная с GHC 7.10, для всех типов автоматически выводятся экземпляры Typeable. Это отличается от предыдущих выпусков, в которых Typeable требовалось явно выводить с помощью языкового расширения DeriveDataTypeable.
Начиная с GHC 7.8, Typeable поддерживает полиморфизм по видам. Изменения, необходимые для этого, могут нарушить работу некоторых старых программ, использующих Typeable. Дополнительные сведения, в том числе инструкции по исправлению кода, приведены на странице PolyTypeable вики
Класс Typeable
class Typeable (a :: k) Источник
Класс Typeable позволяет вычислить конкретное представление типа.
Минимальное полное определение
typeRep#
typeOf :: Typeable a => a -> TypeRep Источник
Получить представление типа значения.
typeRep :: forall {k} proxy (a :: k). Typeable a => proxy a -> TypeRep Источник
Принимает значение типа a и возвращает конкретное представление этого типа.
Начиная с: base-4.7.0.0
Пропозициональное равенство
data (a :: k) :~: (b :: k) where infix 4 Источник
Пропозициональное равенство. Если a :~: b заселён некоторым завершающимся значением, то тип a совпадает с типом b. Чтобы использовать это равенство на практике, сопоставьте с образцом a :~: b, чтобы извлечь конструктор Refl; в теле сопоставления компилятору известно, что a ~ b.
Начиная с: base-4.7.0.0
Экземпляры
| Category ((:~:) :: k -> k -> Type) Исходный код | Начиная с: base-4.7.0.0 |
Определён в GHC.Internal.Control.Category Методыid :: forall (a :: k). a :~: a Исходный код (.) :: forall (b :: k) (c :: k) (a :: k). (b :~: c) -> (a :~: b) -> a :~: c Исходный код | |
| TestCoercion ((:~:) a :: k -> Type) Исходный код | Начиная с: base-4.7.0.0 |
Определён в GHC.Internal.Data.Type.Coercion МетодыtestCoercion :: forall (a0 :: k) (b :: k). (a :~: a0) -> (a :~: b) -> Maybe (Coercion a0 b) Исходный код | |
| TestEquality ((:~:) a :: k -> Type) Исходный код | Начиная с: base-4.7.0.0 |
Определён в GHC.Internal.Data.Type.Equality МетодыtestEquality :: forall (a0 :: k) (b :: k). (a :~: a0) -> (a :~: b) -> Maybe (a0 :~: b) Исходный код | |
| Eq (a :~: b) Исходный код | Начиная с: base-4.7.0.0 |
Определён в GHC.Internal.Data.Type.Equality Методы(==) :: (a :~: b) -> (a :~: b) -> Bool Исходный код (/=) :: (a :~: b) -> (a :~: b) -> Bool Исходный код | |
| Ord (a :~: b) Исходный код | Начиная с: base-4.7.0.0 |
Определён в GHC.Internal.Data.Type.Equality Методыcompare :: (a :~: b) -> (a :~: b) -> Ordering Исходный код (<) :: (a :~: b) -> (a :~: b) -> Bool Исходный код (<=) :: (a :~: b) -> (a :~: b) -> Bool Исходный код (>) :: (a :~: b) -> (a :~: b) -> Bool Исходный код (>=) :: (a :~: b) -> (a :~: b) -> Bool Исходный код max :: (a :~: b) -> (a :~: b) -> a :~: b Исходный код min :: (a :~: b) -> (a :~: b) -> a :~: b Исходный код | |
| (a ~ b, Data a) => Data (a :~: b) Исходный код | Начиная с: base-4.7.0.0 |
Определён в GHC.Internal.Data.Data Методыgfoldl :: (forall d b0. Data d => c (d -> b0) -> d -> c b0) -> (forall g. g -> c g) -> (a :~: b) -> c (a :~: b) Исходный код gunfold :: (forall b0 r. Data b0 => c (b0 -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c (a :~: b) Исходный код toConstr :: (a :~: b) -> Constr Исходный код dataTypeOf :: (a :~: b) -> DataType Исходный код dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c (a :~: b)) Исходный код dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (a :~: b)) Исходный код gmapT :: (forall b0. Data b0 => b0 -> b0) -> (a :~: b) -> a :~: b Исходный код gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> (a :~: b) -> r Исходный код gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> (a :~: b) -> r Исходный код gmapQ :: (forall d. Data d => d -> u) -> (a :~: b) -> [u] Исходный код gmapQi :: Int -> (forall d. Data d => d -> u) -> (a :~: b) -> u Исходный код gmapM :: Monad m => (forall d. Data d => d -> m d) -> (a :~: b) -> m (a :~: b) Исходный код gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> (a :~: b) -> m (a :~: b) Исходный код gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> (a :~: b) -> m (a :~: b) Исходный код | |
| a ~ b => Bounded (a :~: b) Исходный код | Начиная с: base-4.7.0.0 |
Определён в GHC.Internal.Data.Type.Equality | |
| a ~ b => Enum (a :~: b) Исходный код | Начиная с: base-4.7.0.0 |
Определён в GHC.Internal.Data.Type.Equality Методыsucc :: (a :~: b) -> a :~: b Исходный код pred :: (a :~: b) -> a :~: b Исходный код toEnum :: Int -> a :~: b Исходный код fromEnum :: (a :~: b) -> Int Исходный код enumFrom :: (a :~: b) -> [a :~: b] Исходный код enumFromThen :: (a :~: b) -> (a :~: b) -> [a :~: b] Исходный код enumFromTo :: (a :~: b) -> (a :~: b) -> [a :~: b] Исходный код enumFromThenTo :: (a :~: b) -> (a :~: b) -> (a :~: b) -> [a :~: b] Исходный код | |
| a ~ b => Read (a :~: b) Исходный код | Начиная с: base-4.7.0.0 |
Определён в GHC.Internal.Data.Type.Equality МетодыreadsPrec :: Int -> ReadS (a :~: b) Исходный код readList :: ReadS [a :~: b] Исходный код readPrec :: ReadPrec (a :~: b) Исходный код readListPrec :: ReadPrec [a :~: b] Исходный код | |
| Show (a :~: b) Исходный код | Начиная с: base-4.7.0.0 |
Определён в GHC.Internal.Data.Type.Equality МетодыshowsPrec :: Int -> (a :~: b) -> ShowS Исходный код show :: (a :~: b) -> String Исходный код showList :: [a :~: b] -> ShowS Исходный код | |
data (a :: k1) :~~: (b :: k2) where infix 4 Исходный код
Неоднородное пропозициональное равенство видов. Подобно :~:, a :~~: b содержит завершающееся значение тогда и только тогда, когда a и b являются одним и тем же типом.
Начиная с: base-4.10.0.0
Экземпляры
| Category ((:~~:) :: k -> k -> Type) Исходный код | Начиная с: base-4.10.0.0 |
Определено в GHC.Internal.Control.Category Методыid :: forall (a :: k). a :~~: a Исходный код (.) :: forall (b :: k) (c :: k) (a :: k). (b :~~: c) -> (a :~~: b) -> a :~~: c Исходный код | |
| TestCoercion ((:~~:) a :: k -> Type) Исходный код | Начиная с: base-4.10.0.0 |
Определено в GHC.Internal.Data.Type.Coercion МетодыtestCoercion :: forall (a0 :: k) (b :: k). (a :~~: a0) -> (a :~~: b) -> Maybe (Coercion a0 b) Исходный код | |
| TestEquality ((:~~:) a :: k -> Type) Исходный код | Начиная с: base-4.10.0.0 |
Определено в GHC.Internal.Data.Type.Equality МетодыtestEquality :: forall (a0 :: k) (b :: k). (a :~~: a0) -> (a :~~: b) -> Maybe (a0 :~: b) Исходный код | |
| Eq (a :~~: b) Исходный код | Начиная с: base-4.10.0.0 |
Определено в GHC.Internal.Data.Type.Equality Методы(==) :: (a :~~: b) -> (a :~~: b) -> Bool Исходный код (/=) :: (a :~~: b) -> (a :~~: b) -> Bool Исходный код | |
| Ord (a :~~: b) Исходный код | Начиная с: base-4.10.0.0 |
Определено в GHC.Internal.Data.Type.Equality Методыcompare :: (a :~~: b) -> (a :~~: b) -> Ordering Исходный код (<) :: (a :~~: b) -> (a :~~: b) -> Bool Исходный код (<=) :: (a :~~: b) -> (a :~~: b) -> Bool Исходный код (>) :: (a :~~: b) -> (a :~~: b) -> Bool Исходный код (>=) :: (a :~~: b) -> (a :~~: b) -> Bool Исходный код max :: (a :~~: b) -> (a :~~: b) -> a :~~: b Исходный код min :: (a :~~: b) -> (a :~~: b) -> a :~~: b Исходный код | |
| (Typeable i, Typeable j, Typeable a, Typeable b, a ~~ b) => Data (a :~~: b) Исходный код | Начиная с: base-4.10.0.0 |
Определено в GHC.Internal.Data.Data Методыgfoldl :: (forall d b0. Data d => c (d -> b0) -> d -> c b0) -> (forall g. g -> c g) -> (a :~~: b) -> c (a :~~: b) Исходный код gunfold :: (forall b0 r. Data b0 => c (b0 -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c (a :~~: b) Исходный код toConstr :: (a :~~: b) -> Constr Исходный код dataTypeOf :: (a :~~: b) -> DataType Исходный код dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c (a :~~: b)) Исходный код dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (a :~~: b)) Исходный код gmapT :: (forall b0. Data b0 => b0 -> b0) -> (a :~~: b) -> a :~~: b Исходный код gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> (a :~~: b) -> r Исходный код gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> (a :~~: b) -> r Исходный код gmapQ :: (forall d. Data d => d -> u) -> (a :~~: b) -> [u] Исходный код gmapQi :: Int -> (forall d. Data d => d -> u) -> (a :~~: b) -> u Исходный код gmapM :: Monad m => (forall d. Data d => d -> m d) -> (a :~~: b) -> m (a :~~: b) Исходный код gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> (a :~~: b) -> m (a :~~: b) Исходный код gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> (a :~~: b) -> m (a :~~: b) Исходный код | |
| a ~~ b => Bounded (a :~~: b) Исходный код | Начиная с: base-4.10.0.0 |
Определено в GHC.Internal.Data.Type.Equality | |
| a ~~ b => Enum (a :~~: b) Исходный код | Начиная с: base-4.10.0.0 |
Определено в GHC.Internal.Data.Type.Equality Методыsucc :: (a :~~: b) -> a :~~: b Исходный код pred :: (a :~~: b) -> a :~~: b Исходный код toEnum :: Int -> a :~~: b Исходный код fromEnum :: (a :~~: b) -> Int Исходный код enumFrom :: (a :~~: b) -> [a :~~: b] Исходный код enumFromThen :: (a :~~: b) -> (a :~~: b) -> [a :~~: b] Исходный код enumFromTo :: (a :~~: b) -> (a :~~: b) -> [a :~~: b] Исходный код enumFromThenTo :: (a :~~: b) -> (a :~~: b) -> (a :~~: b) -> [a :~~: b] Исходный код | |
| a ~~ b => Read (a :~~: b) Исходный код | Начиная с: base-4.10.0.0 |
Определено в GHC.Internal.Data.Type.Equality МетодыreadsPrec :: Int -> ReadS (a :~~: b) Исходный код readList :: ReadS [a :~~: b] Исходный код readPrec :: ReadPrec (a :~~: b) Исходный код readListPrec :: ReadPrec [a :~~: b] Исходный код | |
| Show (a :~~: b) Исходный код | Начиная с: base-4.10.0.0 |
Определено в GHC.Internal.Data.Type.Equality МетодыshowsPrec :: Int -> (a :~~: b) -> ShowS Исходный код show :: (a :~~: b) -> String Исходный код showList :: [a :~~: b] -> ShowS Исходный код | |
Типобезопасное приведение
cast :: (Typeable a, Typeable b) => a -> Maybe b Исходный код
Операция типобезопасного приведения
eqT :: forall {k} (a :: k) (b :: k). (Typeable a, Typeable b) => Maybe (a :~: b) Исходный код
Получить свидетельство равенства двух типов
Начиная с: base-4.7.0.0
heqT :: forall {k1} {k2} (a :: k1) (b :: k2). (Typeable a, Typeable b) => Maybe (a :~~: b) Исходный код
Получить свидетельство гетерогенного равенства двух типов
Начиная с: base-4.18.0.0
decT :: forall {k} (a :: k) (b :: k). (Typeable a, Typeable b) => Either ((a :~: b) -> Void) (a :~: b) Исходный код
Определить равенство двух типов
Начиная с: base-4.19.0.0
hdecT :: forall {k1} {k2} (a :: k1) (b :: k2). (Typeable a, Typeable b) => Either ((a :~~: b) -> Void) (a :~~: b) Источник
Определяет гетерогенное равенство двух типов.
С версии: base-4.19.0.0
gcast :: forall {k} (a :: k) (b :: k) c. (Typeable a, Typeable b) => c a -> Maybe (c b) Источник
Гибкий вариант с параметром-конструктором типа
Обобщённые приведения для типов высших порядков
gcast1 :: forall {k1} {k2} c (t :: k2 -> k1) (t' :: k2 -> k1) (a :: k2). (Typeable t, Typeable t') => c (t a) -> Maybe (c (t' a)) Источник
Приведение для k1 -> k2
gcast2 :: forall {k1} {k2} {k3} c (t :: k2 -> k3 -> k1) (t' :: k2 -> k3 -> k1) (a :: k2) (b :: k3). (Typeable t, Typeable t') => c (t a b) -> Maybe (c (t' a b)) Источник
Приведение для k1 -> k2 -> k3
Канонический тип-прокси
Proxy — это тип, не содержащий данных, но имеющий фиктивный параметр произвольного типа (или даже рода). Он используется для предоставления информации о типе, даже если значение этого типа отсутствует (или его создание может быть слишком затратным).
Исторически Proxy :: Proxy a — более безопасная альтернатива идиоме undefined :: a.
>>> Proxy :: Proxy (Void, Int -> Int) Proxy
Proxy может содержать даже типы высших родов,
>>> Proxy :: Proxy Either Proxy
>>> Proxy :: Proxy Functor Proxy
>>> Proxy :: Proxy complicatedStructure Proxy
Конструкторы
| Proxy |
Экземпляры
Представления типов
type TypeRep = SomeTypeRep Исходный код
Квантифицированное представление типа.
rnfTypeRep :: TypeRep -> () Исходный код
Привести TypeRep к нормальной форме.
showsTypeRep :: TypeRep -> ShowS Исходный код
Вывести представление типа
mkFunTy :: TypeRep -> TypeRep -> TypeRep Исходный код
Построить тип функции.
Исследование представлений типов
funResultTy :: TypeRep -> TypeRep -> Maybe TypeRep Исходный код
Применяет тип к типу функции. Возвращает: Just u, если первый аргумент представляет функцию типа t -> u, а второй аргумент представляет функцию типа t. В противном случае возвращает Nothing.
splitTyConApp :: TypeRep -> (TyCon, [TypeRep]) Исходный код
Разделяет применение конструктора типа. Обратите внимание: если конструктор типа полиморфный, возвращены не будут использованные виды.
typeRepArgs :: TypeRep -> [TypeRep] Исходный код
Получить типы аргументов из представления типа
typeRepTyCon :: TypeRep -> TyCon Исходный код
Получить конструктор типа из квантифицированного представления типа.
typeRepFingerprint :: TypeRep -> Fingerprint Исходный код
Принимает значение типа a и возвращает конкретное представление этого типа.
Начиная с: base-4.7.0.0
Конструкторы типов
data TyCon Исходный код
Экземпляры
| Eq TyCon Исходный код | |
Определён в GHC.Internal.Classes | |
| Ord TyCon Исходный код | |
Определён в GHC.Internal.Classes Методыcompare :: TyCon -> TyCon -> Ordering Исходный код (<) :: TyCon -> TyCon -> Bool Исходный код (<=) :: TyCon -> TyCon -> Bool Исходный код (>) :: TyCon -> TyCon -> Bool Исходный код (>=) :: TyCon -> TyCon -> Bool Исходный код max :: TyCon -> TyCon -> TyCon Исходный код min :: TyCon -> TyCon -> TyCon Исходный код | |
| Show TyCon Исходный код | Начиная с: base-2.1 |
Определён в GHC.Internal.Show МетодыshowsPrec :: Int -> TyCon -> ShowS Исходный код show :: TyCon -> String Исходный код showList :: [TyCon] -> ShowS Исходный код | |
tyConPackage :: TyCon -> String Исходный код
tyConModule :: TyCon -> String Исходный код
tyConName :: TyCon -> String Исходный код
rnfTyCon :: TyCon -> () Исходный код
tyConFingerprint :: TyCon -> Fingerprint Исходный код
Для обратной совместимости
typeOf1 :: Typeable t => t a -> TypeRep Исходный код
typeOf2 :: Typeable t => t a b -> TypeRep Исходный код
typeOf3 :: Typeable t => t a b c -> TypeRep Исходный код
typeOf4 :: Typeable t => t a b c d -> TypeRep Исходный код
typeOf5 :: Typeable t => t a b c d e -> TypeRep Исходный код
typeOf6 :: Typeable t => t a b c d e f -> TypeRep Исходный код
typeOf7 :: Typeable t => t a b c d e f g -> TypeRep Исходный код
© The University of Glasgow and others
Licensed under a BSD-style license (see top of the page).
https://downloads.haskell.org/~ghc/9.14.1/docs/libraries/base-4.22.0.0-66f8/Data-Typeable.html