GHC.TypeLits
| Safe Haskell | Safe |
|---|---|
| Language | Haskell2010 |
Описание
Расширение языка GHC DataKinds поднимает конструкторы данных, натуральные числа и строки до уровня типов. Этот модуль предоставляет базовые инструменты для работы с числами на уровне типов (вид Nat), строками (вид Symbol) и символами (вид Char). Также он определяет семейство типов TypeError, которое использует строки на уровне типов для поддержки ошибок типов, определённых пользователем.
На данный момент этот модуль является API для работы с литералами на уровне типов. Однако обратите внимание, что он находится в стадии разработки и может быть изменён. Как только дизайн функции DataKinds станет более стабильным, этот модуль будет считаться внутренним модулем GHC, а интерфейс программиста для работы с данными на уровне типов будет определён в отдельной библиотеке.
С версии: base-4.6.0.0
Виды
data Natural
Экземпляры
| TestCoercion SNat Source | С момента: base-4.18.0.0 |
Определено в GHC.Internal.TypeNats | |
| TestEquality SNat Source | С момента: base-4.18.0.0 |
Определено в GHC.Internal.TypeNats | |
| Lift Natural Source | |
| type Compare (a :: Natural) (b :: Natural) Source | |
Определено в GHC.Internal.Data.Type.Ord | |
Синоним типа для Natural.
Ранее это был неявный тип данных, но он был изменён на синоним типа.
С момента: base-4.16.0.0
(Тип) Это тип уровня типов для символов.
Экземпляры
| SingKind Symbol | Since: base-4.9.0.0 |
||||
Определено в GHC.Internal.Generics Связанные типы
| |||||
| TestCoercion SSymbol Источник | Since: base-4.18.0.0 |
||||
Определено в GHC.Internal.TypeLits | |||||
| TestEquality SSymbol Источник | Since: base-4.18.0.0 |
||||
Определено в GHC.Internal.TypeLits | |||||
| KnownSymbol a => SingI (a :: Symbol) | Since: base-4.9.0.0 |
||||
Определено в GHC.Internal.Generics Методыsing :: Sing a | |||||
| type DemoteRep Symbol Источник | |||||
Определено в GHC.Internal.Generics | |||||
| data Sing (s :: Symbol) Источник | |||||
Определено в GHC.Internal.Generics data Sing (s :: Symbol) where
| |||||
| type Compare (a :: Symbol) (b :: Symbol) Источник | |||||
Определено в GHC.Internal.Data.Type.Ord | |||||
Связывание уровня типов и значений
class KnownNat (n :: Nat) where Источник
Этот класс предоставляет целое число, связанное с типом натурального числа. Существуют экземпляры класса для каждой конкретной константы: 0, 1, 2 и т.д.
Since: base-4.7.0.0
natVal :: forall (n :: Nat) proxy. KnownNat n => proxy n -> Integer Источник
Since: base-4.7.0.0
natVal' :: forall (n :: Nat). KnownNat n => Proxy# n -> Integer Источник
Since: base-4.8.0.0
class KnownSymbol (n :: Symbol) where Источник
Этот класс предоставляет строку, связанную с типом символа. Существуют экземпляры класса для каждой конкретной константы: "hello" и т.д.
Since: base-4.7.0.0
Методы
symbolSing :: SSymbol n Источник
symbolVal :: forall (n :: Symbol) proxy. KnownSymbol n => proxy n -> String Источник
Since: base-4.7.0.0
symbolVal' :: forall (n :: Symbol). KnownSymbol n => Proxy# n -> String Source
Since: base-4.8.0.0
class KnownChar (n :: Char) where Source
Since: base-4.16.0.0
charVal :: forall (n :: Char) proxy. KnownChar n => proxy n -> Char Source
charVal' :: forall (n :: Char). KnownChar n => Proxy# n -> Char Source
Этот тип представляет неизвестные натуральные числа на уровне типов.
Since: base-4.10.0.0
Примеры
Этот тип представляет неизвестные символы уровня типа.
Конструкторы
| KnownSymbol n => SomeSymbol (Proxy n) | С момента: base-4.7.0.0 |
Примеры использования
тип SomeChar Исходный код
Конструкторы
| Известный символ n => SomeChar (Прокси n) |
Примеры
| Read SomeChar Исходный код | |
Определено в GHC.Internal.TypeLits МетодыreadsPrec :: Целое -> ReadS SomeChar Исходный код readList :: ReadS [SomeChar] Исходный код | |
| Show SomeChar Исходный код | |
Определено в GHC.Internal.TypeLits МетодыshowsPrec :: Целое -> SomeChar -> ShowS Исходный код show :: SomeChar -> Строка Исходный код showList :: [SomeChar] -> ShowS Исходный код | |
| Eq SomeChar Исходный код | |
Определено в GHC.Internal.TypeLits Методы(==) :: SomeChar -> SomeChar -> Bool Исходный код (/=) :: SomeChar -> SomeChar -> Bool Исходный код | |
| Ord SomeChar Исходный код | |
Определено в GHC.Internal.TypeLits Методыcompare :: SomeChar -> SomeChar -> Порядок Исходный код (<) :: SomeChar -> SomeChar -> Bool Исходный код (<=) :: SomeChar -> SomeChar -> Bool Исходный код (>) :: SomeChar -> SomeChar -> Bool Исходный код (>=) :: SomeChar -> SomeChar -> Bool Исходный код max :: SomeChar -> SomeChar -> SomeChar Исходный код min :: SomeChar -> SomeChar -> SomeChar Исходный код | |
someNatVal :: Целое -> Возможно SomeNat Исходный код
Преобразование целого числа в неизвестное число-уровень.
С: base-4.7.0.0
someSymbolVal :: Строка -> SomeSymbol Исходный код
Преобразование строки в неизвестный символ-уровень.
С: base-4.7.0.0
someCharVal :: Символ -> SomeChar Исходный код
Преобразование символа в неизвестный символ-уровень.
С: base-4.16.0.0
sameNat :: forall (a :: Nat) (b :: Nat) proxy1 proxy2. (KnownNat a, KnownNat b) => proxy1 a -> proxy2 b -> Возможно (a :~: b) Исходный код
Получаем доказательство того, что функция была вызвана с одинаковыми число-уровневыми числами или Nothing.
С: base-4.7.0.0
sameSymbol :: forall (a :: Symbol) (b :: Symbol) proxy1 proxy2. (KnownSymbol a, KnownSymbol b) => proxy1 a -> proxy2 b -> Maybe (a :~: b) Source
Мы получаем доказательство, что эта функция была вызвана с одинаковыми символами уровня типов, или Nothing.
Since: base-4.7.0.0
sameChar :: forall (a :: Char) (b :: Char) proxy1 proxy2. (KnownChar a, KnownChar b) => proxy1 a -> proxy2 b -> Maybe (a :~: b) Source
Мы получаем доказательство, что эта функция была вызвана с одинаковыми символами уровня типов, или Nothing.
Since: base-4.16.0.0
decideNat :: forall (a :: Nat) (b :: Nat) proxy1 proxy2. (KnownNat a, KnownNat b) => proxy1 a -> proxy2 b -> Either ((a :~: b) -> Void) (a :~: b) Source
Мы получаем доказательство, что эта функция была вызвана с одинаковыми числами уровня типов, или что числа уровня типов различны.
Since: base-4.19.0.0
decideSymbol :: forall (a :: Symbol) (b :: Symbol) proxy1 proxy2. (KnownSymbol a, KnownSymbol b) => proxy1 a -> proxy2 b -> Either ((a :~: b) -> Void) (a :~: b) Source
Мы получаем доказательство, что эта функция была вызвана с одинаковыми символами уровня типов, или что символы уровня типов различны.
Since: base-4.19.0.0
decideChar :: forall (a :: Char) (b :: Char) proxy1 proxy2. (KnownChar a, KnownChar b) => proxy1 a -> proxy2 b -> Either ((a :~: b) -> Void) (a :~: b) Source
Мы получаем доказательство, что эта функция была вызвана с одинаковыми символами уровня типов, или что символы уровня типов различны.
Since: base-4.19.0.0
data OrderingI (a :: k) (b :: k) where Source
Тип данных Ordering для литералов типов, предоставляющий доказательство их порядка.
Since: base-4.16.0.0
Конструкторы
| LTI :: forall {k} (a :: k) (b :: k). Compare a b ~ 'LT => OrderingI a b | |
| EQI :: forall {k} (a :: k). Compare a a ~ 'EQ => OrderingI a a | |
| GTI :: forall {k} (a :: k) (b :: k). Compare a b ~ 'GT => OrderingI a b |
cmpNat :: forall (a :: Nat) (b :: Nat) proxy1 proxy2. (KnownNat a, KnownNat b) => proxy1 a -> proxy2 b -> OrderingI a b Source
Как и sameNat, но если числа не равны, это дополнительно предоставляет доказательство LT или GT.
Since: base-4.16.0.0
cmpSymbol :: forall (a :: Symbol) (b :: Symbol) proxy1 proxy2. (KnownSymbol a, KnownSymbol b) => proxy1 a -> proxy2 b -> OrderingI a b Source
Как и sameSymbol, но если символы не равны, это дополнительно предоставляет доказательство LT или GT.
Since: base-4.16.0.0
cmpChar :: forall (a :: Char) (b :: Char) proxy1 proxy2. (KnownChar a, KnownChar b) => proxy1 a -> proxy2 b -> OrderingI a b Source
Как sameChar, но если символы не равны, это дополнительно предоставляет доказательство LT или GT.
Since: base-4.16.0.0
Синглетонные значения
Значение-уровень свидетель для типа-уровень натурального числа. Это обычно называют синлетонным типом, так как для каждого n, существует единственное значение, которое населяет тип SNat n (кроме bottom).
Определение SNat намеренно оставлено абстрактным. Чтобы получить значение SNat, используйте один из следующих способов:
- Метод
natSingKnownNat. - Синоним шаблона
SNat. - Функция
withSomeSNat, которая создаетSNatиз числаNatural.
Since: base-4.18.0.0
Экземпляры
| TestCoercion SNat Source | Since: base-4.18.0.0 |
Определено в GHC.Internal.TypeNats | |
| TestEquality SNat Source | Since: base-4.18.0.0 |
Определено в GHC.Internal.TypeNats | |
| Show (SNat n) Source | Since: base-4.18.0.0 |
| Eq (SNat n) Source | Since: base-4.19.0.0 |
| Ord (SNat n) Source | Since: base-4.19.0.0 |
Определено в GHC.Internal.TypeNats | |
data SSymbol (s :: Symbol) Source
Значение уровня значения для символа уровня типа. Это обычно называется типом singleton, так как для каждого s, существует единственное значение, которое населяет тип SSymbol s (кроме bottom).
Определение SSymbol преднамеренно оставлено абстрактным. Чтобы получить значение SSymbol, используйте один из следующих способов:
- Метод
symbolSingKnownSymbol. - Синоним шаблона
SSymbol. - Функция
withSomeSSymbol, которая создаетSSymbolизString.
Since: base-4.18.0.0
Экземпляры
| TestCoercion SSymbol Source | Since: base-4.18.0.0 |
Определено в GHC.Internal.TypeLits | |
| TestEquality SSymbol Source | Since: base-4.18.0.0 |
Определено в GHC.Internal.TypeLits | |
| Show (SSymbol s) Source | Since: base-4.18.0.0 |
| Eq (SSymbol s) Source | Since: base-4.19.0.0 |
| Ord (SSymbol s) Source | Since: base-4.19.0.0 |
Определено в GHC.Internal.TypeLits | |
Значение уровня значения для символа уровня типа. Это обычно называется типом singleton, так как для каждого c, существует единственное значение, которое населяет тип SChar c (кроме bottom).
Определение SChar преднамеренно оставлено абстрактным. Чтобы получить значение SChar, используйте один из следующих способов:
- Метод
charSingклассаKnownChar. - Синоним шаблона
SChar. - Функция
withSomeSChar, которая создаётSCharизChar.
Since: base-4.18.0.0
Экземпляры
| TestCoercion SChar Источник | Since: base-4.18.0.0 |
Определено в GHC.Internal.TypeLits | |
| TestEquality SChar Источник | Since: base-4.18.0.0 |
Определено в GHC.Internal.TypeLits | |
| Show (SChar c) Источник | Since: base-4.18.0.0 |
| Eq (SChar c) Источник | Since: base-4.19.0.0 |
| Ord (SChar c) Источник | Since: base-4.19.0.0 |
Определено в GHC.Internal.TypeLits | |
pattern SNat :: () => KnownNat n => SNat n Источник
Явно двунаправленный синоним шаблона, связывающий SNat с ограничением KnownNat.
Как выражение: Конструирует явное значение SNat n из неявного ограничения KnownNat n:
SNat @n :: KnownNat n => SNat n
Как шаблон: Соответствует явному значению SNat n, вводя неявное ограничение KnownNat n в область видимости:
f :: SNat n -> .. f SNat = {- KnownNat n in scope -}
Since: base-4.18.0.0
pattern SSymbol :: () => KnownSymbol s => SSymbol s Источник
Явно двунаправленный синоним шаблона, связывающий SSymbol с ограничением KnownSymbol.
Как выражение: Конструирует явное значение SSymbol s из неявного ограничения KnownSymbol s:
SSymbol @s :: KnownSymbol s => SSymbol s
В качестве шаблона: Сопоставляет явное значение SSymbol s , вводя неявное ограничение KnownSymbol s в область видимости:
f :: SSymbol s -> .. f SSymbol = {- KnownSymbol s in scope -}
С момента: base-4.18.0.0
pattern SChar :: () => KnownChar c => SChar c Исходный код
Явно двунаправленный шаблон-синоним, связывающий SChar с ограничением KnownChar.
В качестве выражения: Конструирует явное значение SChar c из неявного ограничения KnownChar c:
SChar @c :: KnownChar c => SChar c
В качестве шаблона: Сопоставляет явное значение SChar c , вводя неявное ограничение KnownChar c в область видимости:
f :: SChar c -> .. f SChar = {- KnownChar c in scope -}
С момента: base-4.18.0.0
fromSNat :: forall (n :: Nat). SNat n -> Integer Исходный код
Возвращает Integer , соответствующее n в значении SNat n. Возвращаемое Integer всегда неотрицательно.
Для версии этой функции, которая возвращает Natural вместо Integer, см. fromSNat в GHC.TypeNats.
С момента: base-4.18.0.0
fromSSymbol :: forall (s :: Symbol). SSymbol s -> String Исходный код
Возвращает строку, соответствующую s в значении SSymbol s.
С момента: base-4.18.0.0
fromSChar :: forall (c :: Char). SChar c -> Char Исходный код
Возвращает Char , соответствующее c в значении SChar c.
С момента: base-4.18.0.0
withSomeSNat :: Integer -> (forall (n :: Nat). Maybe (SNat n) -> r) -> r Исходный код
Попытаться преобразовать Integer в значение SNat n, где n — это новое натуральное число на уровне типов. Если аргумент Integer неотрицателен, вызовите продолжение с Just sn, где sn — это значение SNat n. Если аргумент Integer отрицателен, вызовите продолжение с Nothing.
Для версии этой функции, где продолжение использует 'SNat n
instead of Maybe (SNat n)@, см. withSomeSNat в GHC.TypeNats.
С момента: base-4.18.0.0
withSomeSSymbol :: String -> (forall (s :: Symbol). SSymbol s -> r) -> r Исходный код
Преобразовать String в значение SSymbol s, где s — это новый символ на уровне типов.
С момента: base-4.18.0.0
withSomeSChar :: Char -> (forall (c :: Char). SChar c -> r) -> r Исходный код
Преобразовать Char в значение SChar c, где c — это новый символ на уровне типов.
С момента: base-4.18.0.0
withKnownNat :: forall (n :: Nat) r. SNat n -> (KnownNat n => r) -> r Исходный код
Преобразуйте явное значение SNat n в неявное ограничение KnownNat n.
С момента: base-4.18.0.0
withKnownSymbol :: forall (s :: Symbol) r. SSymbol s -> (KnownSymbol s => r) -> r Исходный код
Преобразуйте явное значение SSymbol s в неявное ограничение KnownSymbol s.
С момента: base-4.18.0.0
withKnownChar :: forall (c :: Char) r. SChar c -> (KnownChar c => r) -> r Исходный код
Преобразуйте явное значение SChar c в неявное ограничение KnownChar c.
С момента: base-4.18.0.0
Функции над литералами типов
type (<=) (x :: t) (y :: t) = Assert (x <=? y) (LeErrMsg x y :: Constraint) infix 4 Исходный код
Сравнение (<=) сравнимых типов как ограничение.
С момента: base-4.16.0.0
type (<=?) (m :: k) (n :: k) = OrdCond (Compare m n) 'True 'True 'False infix 4 Исходный код
Сравнение (<=) сравнимых типов как функция.
С момента: base-4.16.0.0
type family (a :: Natural) + (b :: Natural) :: Natural where ... infixl 6 Исходный код
Сложение натуральных чисел на уровне типов.
С момента: base-4.7.0.0
type family (a :: Natural) * (b :: Natural) :: Natural where ... infixl 7 Исходный код
Умножение натуральных чисел на уровне типов.
С момента: base-4.7.0.0
type family (a :: Natural) ^ (b :: Natural) :: Natural where ... infixr 8 Исходный код
Возведение в степень натуральных чисел на уровне типов.
С момента: base-4.7.0.0
type family (a :: Natural) - (b :: Natural) :: Natural where ... infixl 6 Исходный код
Вычитание натуральных чисел на уровне типов.
С момента: base-4.7.0.0
type family Div (a :: Natural) (b :: Natural) :: Natural where ... infixl 7 Source
Деление (округление вниз) натуральных чисел. Div x 0 не определено (то есть, его нельзя сократить).
Since: base-4.11.0.0
type family Mod (a :: Natural) (b :: Natural) :: Natural where ... infixl 7 Source
Остаток от деления натуральных чисел. Mod x 0 не определено (то есть, его нельзя сократить).
Since: base-4.11.0.0
type family Log2 (a :: Natural) :: Natural where ... Source
Логарифм по основанию 2 (округление вниз) натуральных чисел. Log 0 не определено (то есть, его нельзя сократить).
Since: base-4.11.0.0
type family AppendSymbol (a :: Symbol) (b :: Symbol) :: Symbol where ... Source
Конкатенация символов на уровне типов.
Since: base-4.10.0.0
type family CmpNat (a :: Natural) (b :: Natural) :: Ordering where ... Source
Сравнение натуральных чисел на уровне типов, как функция.
Since: base-4.7.0.0
type family CmpSymbol (a :: Symbol) (b :: Symbol) :: Ordering where ... Source
Сравнение символов на уровне типов, как функция.
Since: base-4.7.0.0
type family CmpChar (a :: Char) (b :: Char) :: Ordering where ... Source
Сравнение символов на уровне типов.
Since: base-4.16.0.0
type family ConsSymbol (a :: Char) (b :: Symbol) :: Symbol where ... Source
Расширение символа на уровне типа символом на уровне типа.
Since: base-4.16.0.0
type family UnconsSymbol (a :: Symbol) :: Maybe (Char, Symbol) where ... Source
Эта семейство типов дает тип Just содержащий первый символ и хвост, если он определён, и Nothing в противном случае.
Since: base-4.16.0.0
type family CharToNat (a :: Char) :: Natural where ... Source
Преобразование символа в его код Юникода (см. ord)
Since: base-4.16.0.0
type family NatToChar (a :: Natural) :: Char where ... Source
Преобразование кода Юникода в символ (см. chr)
Since: base-4.16.0.0
Ошибки пользовательских типов
type family TypeError (a :: ErrorMessage) :: b where ... Source
Эквивалент error на уровне типов.
Полиморфный вид этого типа позволяет использовать его в нескольких случаях. Например, он может быть использован в качестве ограничения, например, для обеспечения более подробного сообщения об ошибке для несуществующей реализации.
-- in a context
instance TypeError (Text "Cannot Show functions." :$$:
Text "Perhaps there is a missing argument?")
=> Show (a -> b) where
showsPrec = error "unreachable"
Его также можно разместить справа от функции на уровне типов, чтобы обеспечить ошибку для недопустимого случая.
type family ByteSize x where
ByteSize Word16 = 2
ByteSize Word8 = 1
ByteSize a = TypeError (Text "The type " :<>: ShowType a :<>:
Text " is not exportable.")
Since: base-4.9.0.0
data ErrorMessage Source
Описание пользовательской ошибки типа.
Конструкторы
| Text Symbol | Показать текст как есть. |
| ShowType t | Красиво вывести тип. |
| ErrorMessage :<>: ErrorMessage infixl 6 | Разместить два фрагмента сообщения об ошибке рядом. |
| ErrorMessage :$$: ErrorMessage infixl 5 | Уложить два фрагмента сообщения об ошибке друг под другом. |
© The University of Glasgow and others
Licensed under a BSD-style license (see top of the page).
https://downloads.haskell.org/~ghc/9.12.1/docs/libraries/base-4.21.0.0-8e62/GHC-TypeLits.html