Spec-Zone.ru › Haskell 7

Тип данных.Равенство

Лицензия BSD-стиль (см. файл LICENSE в дистрибутиве)
Поддерживающий libraries@haskell.org
Устойчивость экспериментальная
Переносимость не переносима
Безопасный Haskell Нет
Язык Haskell2010

Содержание

  • Тип равенства
  • Работа с равенством
  • Выведение равенства из других типов
  • Равенство на уровне типов Bool

Описание

Определение пропозиционального равенства (:~:). Сопоставление с образцом переменной типа (a :~: b) порождает доказательство, что a ~ b.

С: 4.7.0.0

Тип равенства

data a :~: b where infix 4 Источник

Пропозициональное равенство. Если a :~: b населен какой-то завершающейся величиной, то тип a такой же, как тип b. Для практического использования этого равенства, сопоставьте с образцом a :~: b, чтобы получить конструктор Refl; в теле сопоставления с образцом компилятор знает, что a ~ b.

С: 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)

Работа с равенством

sym :: (a :~: b) -> b :~: a Источник

Симметрия равенства

trans :: (a :~: b) -> (b :~: c) -> a :~: c Источник

Транзитивность равенства

castWith :: (a :~: b) -> a -> b Источник

Безопасное преобразование типов, использующее пропозициональное равенство

gcastWith :: (a :~: b) -> ((a ~ b) => r) -> r Источник

Обобщённая форма безопасного преобразования типов с использованием пропозиционального равенства

apply :: (f :~: g) -> (a :~: b) -> f a :~: g b Источник

Применение одного равенства к другому, соответственно

Выведение равенства из других типов

class TestEquality f where Источник

Этот класс содержит типы, где вы можете узнать равенство двух типов из информации, содержащейся в терминах. Обычно, этот класс населяют только типы-синглетоны.

Методы

testEquality :: f a -> f b -> Maybe (a :~: b) Источник

Условно докажите равенство a и b.

Равенство на уровне типов Bool

type family a == b :: Bool infix 4 Источник

Семейство типов для вычисления булевого равенства. Экземпляры предоставляются только для открытых видов, таких как * и видов функций. Экземпляры также предоставляются для типов данных, экспортированных из base. Поликинетический экземпляр не предоставляется, так как рекурсивное определение для алгебраических видов обычно более полезно.

Экземпляры

type (==) Bool a b
type (==) Ordering a b
type (==) * a b
type (==) Nat a b
type (==) Symbol a b
type (==) () a b
type (==) [k] a b
type (==) (Maybe k) a b
type (==) (k -> k1) a b
type (==) (Either k k1) a b
type (==) ((,) k k1) a b
type (==) ((,,) k k1 k2) a b
type (==) ((,,,) k k1 k2 k3) a b
type (==) ((,,,,) k k1 k2 k3 k4) a b
type (==) ((,,,,,) k k1 k2 k3 k4 k5) a b
type (==) ((,,,,,,) k k1 k2 k3 k4 k5 k6) a b
type (==) ((,,,,,,,) k k1 k2 k3 k4 k5 k6 k7) a b
type (==) ((,,,,,,,,) k k1 k2 k3 k4 k5 k6 k7 k8) a b
type (==) ((,,,,,,,,,) k k1 k2 k3 k4 k5 k6 k7 k8 k9) a b
type (==) ((,,,,,,,,,,) k k1 k2 k3 k4 k5 k6 k7 k8 k9 k10) a b
type (==) ((,,,,,,,,,,,) k k1 k2 k3 k4 k5 k6 k7 k8 k9 k10 k11) a b
type (==) ((,,,,,,,,,,,,) k k1 k2 k3 k4 k5 k6 k7 k8 k9 k10 k11 k12) a b
type (==) ((,,,,,,,,,,,,,) k k1 k2 k3 k4 k5 k6 k7 k8 k9 k10 k11 k12 k13) a b
type (==) ((,,,,,,,,,,,,,,) k k1 k2 k3 k4 k5 k6 k7 k8 k9 k10 k11 k12 k13 k14) a b

© 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-Type-Equality.html

Spec-Zone.ru

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