Spec-Zone.ru › Haskell 7

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
  • Пропозициональное равенство
  • Для обратной совместимости
  • Безопасное приведение типов
  • Обобщенные приведения для типов высших порядков
  • Канонический тип-прокси
  • Представления типов
  • Создание представлений типов
  • Наблюдение за представлениями типов

Описание

Класс Typeable в некоторой степени реифицирует типы, связывая представления типов с типами. Эти представления типов можно сравнивать, и, в свою очередь, можно определить операцию безопасного приведения типов. Для этой цели небезопасное приведение типов защищено проверкой на эквивалентность типов (представлений). Модуль Data.Dynamic использует Typeable для реализации динамических типов. Модуль Data.Data использует Typeable и безопасное приведение типов (но не динамические типы) для поддержки стиля обобщенного программирования "Scrap your boilerplate".

Примечания о совместимости

Начиная с GHC 7.8, Typeable является поли-киндированным. Изменения, необходимые для этого, могут сломать некоторые старые программы, использующие Typeable. Более подробная информация об этом, включая способы исправления вашего кода, может быть найдена на странице PolyTypeable wiki

Класс Typeable

class Typeable a Source

Класс Typeable позволяет вычислить конкретное представление типа.

Минимальное полное определение

typeRep#

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

Конструкторы

Refl :: a :~: a

Экземпляры

Category k ((:~:) k)
TestEquality k ((:~:) k a)
TestCoercion k ((:~:) k a)
(~) k a b => Bounded ((:~:) k a b)
(~) k a b => Enum ((:~:) k a b)
Eq ((:~:) k a b)
((~) * a b, Data a) => Data ((:~:) * a b)
Ord ((:~:) k a b)
(~) k a b => Read ((:~:) k a b)
Show ((:~:) k a b)

Для обратной совместимости

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

Операция безопасного приведения типов

END_OF_DOCUMENT_MARKER

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

Канонический тип прокси

data Proxy t Source

Конкретный, поликиновый тип прокси

Конструкторы

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)

Представления типов

data TypeRep Source

Конкретное представление (мономорфного) типа. TypeRep поддерживает разумно эффективное равенство.

Примеры

Eq TypeRep
Ord TypeRep
Show 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

data TyCon Source

Абстрактное представление конструктора типа. TyCon объекты могут быть построены с использованием mkTyCon.

Примеры

Eq TyCon
Ord TyCon
Show TyCon

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

Конструирование представлений типов

mkTyCon3 Source

Аргументы

:: String

Имя пакета

-> String

Имя модуля

-> String

Имя конструктора типа

-> TyCon

Уникальный 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API