Data.Typeable
| 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 |
Содержание
Описание
Класс Typeable в некоторой степени реифицирует типы, связывая представления типов с типами. Эти представления типов можно сравнивать, и, в свою очередь, можно определить операцию безопасного приведения типов. Для этой цели небезопасное приведение типов защищено проверкой на эквивалентность типов (представлений). Модуль Data.Dynamic использует Typeable для реализации динамических типов. Модуль Data.Data использует Typeable и безопасное приведение типов (но не динамические типы) для поддержки стиля обобщенного программирования "Scrap your boilerplate".
Примечания о совместимости
Начиная с GHC 7.8, Typeable является поли-киндированным. Изменения, необходимые для этого, могут сломать некоторые старые программы, использующие Typeable. Более подробная информация об этом, включая способы исправления вашего кода, может быть найдена на странице PolyTypeable wiki
Класс Typeable
Класс Typeable позволяет вычислить конкретное представление типа.
Минимальное полное определение
typeRep :: forall proxy a. Typeable a => proxy a -> TypeRep Source
Принимает значение типа a и возвращает конкретное представление этого типа.
Since: 4.7.0.0
Пропозициональное равенство
data a :~: b where infix 4 Source
Пропозициональное равенство. Если a :~: b населен каким-либо завершающимся значением, то тип a такой же, как тип b. Чтобы использовать это равенство на практике, сопоставьте по образцу a :~: b чтобы получить конструктор Refl; в теле сопоставления по образцу компилятор знает, что a ~ b.
Since: 4.7.0.0
Экземпляры
Для обратной совместимости
typeOf :: forall a. Typeable a => a -> TypeRep Source
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
Безопасное приведение типов
cast :: forall a b. (Typeable a, Typeable b) => a -> Maybe b Source
Операция безопасного приведения типов
eqT :: forall a b. (Typeable a, Typeable b) => Maybe (a :~: b) Source
Извлечь свидетельство равенства двух типов
Since: 4.7.0.0
gcast :: forall a b c. (Typeable a, Typeable b) => c a -> Maybe (c b) Source
Гибкая вариация, параметризованная конструктором типа
Обобщенные преобразования для типов высших порядков
gcast1 :: forall c t t' a. (Typeable t, Typeable t') => c (t a) -> Maybe (c (t' a)) Source
Преобразование над k1 -> k2
gcast2 :: forall c t t' a b. (Typeable t, Typeable t') => c (t a b) -> Maybe (c (t' a b)) Source
Преобразование над k1 -> k2 -> k3
Канонический тип прокси
Конкретный, поликиновый тип прокси
Конструкторы
| Proxy |
Примеры
| Monad (Proxy *) | |
| Functor (Proxy *) | |
| Applicative (Proxy *) | |
| Foldable (Proxy *) | |
| Traversable (Proxy *) | |
| Bounded (Proxy k s) | |
| Enum (Proxy k s) | |
| Eq (Proxy k s) | |
| Data t => Data (Proxy * t) | |
| Ord (Proxy k s) | |
| Read (Proxy k s) | |
| Show (Proxy k s) | |
| Ix (Proxy k s) | |
| Generic (Proxy * t) | |
| Monoid (Proxy k s) | |
| type Rep (Proxy k t) |
Представления типов
Конкретное представление (мономорфного) типа. TypeRep поддерживает разумно эффективное равенство.
typeRepFingerprint :: TypeRep -> Fingerprint Source
Наблюдение за Fingerprint представления типа
Since: 4.8.0.0
rnfTypeRep :: TypeRep -> () Source
Вспомогательная функция для полной оценки TypeRep для использования как NFData(rnf) реализации
Since: 4.8.0.0
showsTypeRep :: TypeRep -> ShowS Source
Абстрактное представление конструктора типа. TyCon объекты могут быть построены с использованием mkTyCon.
tyConFingerprint :: TyCon -> Fingerprint Source
Since: 4.8.0.0
tyConString :: TyCon -> String Source
Устарело: переименовано в tyConName; tyConModule и tyConPackage также доступны.
Наблюдение за строковым представлением типа
tyConPackage :: TyCon -> String Source
Since: 4.5.0.0
tyConModule :: TyCon -> String Source
Since: 4.5.0.0
tyConName :: TyCon -> String Source
Since: 4.5.0.0
rnfTyCon :: TyCon -> () Source
Вспомогательная функция для полной оценки TyCon для использования в качестве реализации NFData(rnf)
Since: 4.8.0.0
Конструирование представлений типов
Аргументы
| :: String | Имя пакета |
| -> String | Имя модуля |
| -> String | Имя конструктора типа |
| -> TyCon | Уникальный |
Создает TyCon объект, представляющий конструктор типа. Реализация Data.Typeable должна обеспечивать соблюдение следующего:
A==A' ^ B==B' ^ C==C' ==> mkTyCon A B C == mkTyCon A' B' C'
mkTyConApp :: TyCon -> [TypeRep] -> TypeRep Source
Применяет мономорфный конструктор типов к последовательности типов
mkAppTy :: TypeRep -> TypeRep -> TypeRep Source
Добавляет аргумент TypeRep к TypeRep.
mkFunTy :: TypeRep -> TypeRep -> TypeRep Source
Особый случай mkTyConApp, который применяет конструктор типа функции к паре типов.
Наблюдение за представлениями типов
splitTyConApp :: TypeRep -> (TyCon, [TypeRep]) Source
Разделяет применение конструктора типов. Обратите внимание, что если конструктор типов полиморфен, это не вернет используемые виды. См. splitPolyTyConApp, если вам нужны все части.
funResultTy :: TypeRep -> TypeRep -> Maybe TypeRep Source
Применяет тип к типу функции. Возвращает: Just u, если первый аргумент представляет функцию типа t -> u, а второй аргумент представляет функцию типа t. В противном случае возвращает Nothing.
typeRepTyCon :: TypeRep -> TyCon Source
Наблюдение за конструктором типа представления типа
typeRepArgs :: TypeRep -> [TypeRep] Source
Наблюдение за аргументами типа представления типа
© The University of Glasgow and others
Licensed under a BSD-style license (see top of the page).
https://downloads.haskell.org/~ghc/7.10.3/docs/html/libraries/base-4.8.2.0/Data-Typeable.html