GHC.TypeLits
| Safe Haskell | Надёжный |
|---|---|
| Язык | Haskell2010 |
Описание
Расширение языка DataKinds GHC поднимает конструкторы данных, натуральные числа и строки до уровня типов. Этот модуль предоставляет примитивы для работы с числами на уровне типов (тип Nat) и строками (тип Symbol). Он также определяет тип TypeError, позволяющий использовать строковые литералы на уровне типов для поддержки пользовательских ошибок типов.
На данный момент этот модуль является API для работы с литералами типов. Однако следует помнить, что он находится в стадии разработки и может быть изменён. После того, как дизайн функции DataKinds станет более стабильным, этот модуль будет рассматриваться только как внутренний модуль GHC, а интерфейс программиста для работы с данными на уровне типов будет определён в отдельной библиотеке.
С момента выпуска: base-4.6.0.0
Типы
data Nat Исходный код
(Тип) Это тип натуральных чисел на уровне типов.
Примеры реализации
| KnownNat n => HasResolution (n :: Nat) | Например, |
Определено в Data.Fixed Методыresolution :: p n -> Integer Исходный код | |
data Символ Исходный код
(Тип) Это тип символов на уровне типов. Объявлен здесь, потому что класс IP нуждается в нём
Связывание уровня типов и значений
class KnownNat (n :: Nat) Исходный код
Этот класс предоставляет целое число, ассоциированное с натуральным числом на уровне типов. Существуют экземпляры класса для каждого конкретного литерала: 0, 1, 2 и т.д.
С момента выпуска: base-4.7.0.0
Минимальное полное определение
natSing
natVal :: forall n proxy. KnownNat n => proxy n -> Integer Исходный код
С момента выпуска: base-4.7.0.0
natVal' :: forall n. KnownNat n => Proxy# n -> Integer Исходный код
С момента выпуска: base-4.8.0.0
class KnownSymbol (n :: Символ) Исходный код
Этот класс предоставляет строку, ассоциированную со символом на уровне типов. Существуют экземпляры класса для каждого конкретного литерала: "hello" и т.д.
С момента выпуска: base-4.7.0.0
Минимальное полное определение
symbolSing
symbolVal :: forall n proxy. KnownSymbol n => proxy n -> String Исходный код
С момента выпуска: base-4.7.0.0
symbolVal' :: forall n. KnownSymbol n => Proxy# n -> String Исходный код
С момента выпуска: base-4.8.0.0
data SomeNat Исходный код
Этот тип представляет неизвестные натуральные числа на уровне типов.
С момента выпуска: base-4.10.0.0
Примеры использования
| Eq SomeNat | С момента: base-4.7.0.0 |
Определено в GHC.TypeNats | |
| Ord SomeNat | С момента: base-4.7.0.0 |
Определено в GHC.TypeNats Методыcompare :: SomeNat -> SomeNat -> Ordering Исходный код < :: SomeNat -> SomeNat -> Bool Исходный код <= :: SomeNat -> SomeNat -> Bool Исходный код > :: SomeNat -> SomeNat -> Bool Исходный код >= :: SomeNat -> SomeNat -> Bool Исходный код max :: SomeNat -> SomeNat -> SomeNat Исходный код min :: SomeNat -> SomeNat -> SomeNat Исходный код | |
| Read SomeNat | С момента: base-4.7.0.0 |
Определено в GHC.TypeNats МетодыreadsPrec :: Int -> ReadS SomeNat Исходный код readList :: ReadS [SomeNat] Исходный код | |
| Show SomeNat | С момента: base-4.7.0.0 |
Определено в GHC.TypeNats МетодыshowsPrec :: Int -> SomeNat -> ShowS Исходный код show :: SomeNat -> String Исходный код showList :: [SomeNat] -> ShowS Исходный код | |
Этот тип представляет неизвестные символы уровня типов.
Конструкторы
| forall n.KnownSymbol n => SomeSymbol (Proxy n) | С момента: base-4.7.0.0 |
Примеры использования
someNatVal :: Integer -> Maybe SomeNat Источник
Преобразовать целое число в неизвестное число типа.
С момента выпуска: base-4.7.0.0
someSymbolVal :: String -> SomeSymbol Источник
Преобразовать строку в неизвестный символ типа.
С момента выпуска: base-4.7.0.0
sameNat :: (KnownNat a, KnownNat b) => Proxy a -> Proxy b -> Maybe (a :~: b) Источник
Мы либо получаем доказательство, что эта функция была вызвана с одинаковыми числовыми значениями типа, либо Nothing.
С момента выпуска: base-4.7.0.0
sameSymbol :: (KnownSymbol a, KnownSymbol b) => Proxy a -> Proxy b -> Maybe (a :~: b) Источник
Мы либо получаем доказательство, что эта функция была вызвана с одинаковыми символами типа, либо Nothing.
С момента выпуска: base-4.7.0.0
Функции над литералами типов
type (<=) x y = (x <=? y) ~ 'True infix 4 Источник
Сравнение натуральных чисел типа в качестве условия.
С момента выпуска: base-4.7.0.0
type family (m :: Nat) <=? (n :: Nat) :: Bool infix 4 Source
Сравнение натуральных чисел на уровне типов, как функция. ПРИМЕЧАНИЕ: Функциональность этой функции должна быть включена в CmpNat, поэтому она может быть удалена в будущем. Пожалуйста, сообщите нам, если вы обнаружите расхождения между этими двумя функциями.
type family (m :: Nat) + (n :: Nat) :: Nat infixl 6 Source
Сложение натуральных чисел на уровне типов.
С версии: base-4.7.0.0
type family (m :: Nat) * (n :: Nat) :: Nat infixl 7 Source
Умножение натуральных чисел на уровне типов.
С версии: base-4.7.0.0
type family (m :: Nat) ^ (n :: Nat) :: Nat infixr 8 Source
Возведение в степень натуральных чисел на уровне типов.
С версии: base-4.7.0.0
type family (m :: Nat) - (n :: Nat) :: Nat infixl 6 Source
Вычитание натуральных чисел на уровне типов.
С версии: base-4.7.0.0
type family Div (m :: Nat) (n :: Nat) :: Nat infixl 7 Source
Деление натуральных чисел (округление вниз). Div x 0 не определено (т.е. его нельзя упростить).
С версии: base-4.11.0.0
type family Mod (m :: Nat) (n :: Nat) :: Nat infixl 7 Source
Остаток от деления натуральных чисел. Mod x 0 не определено (т.е. его нельзя упростить).
С версии: base-4.11.0.0
type family Log2 (m :: Nat) :: Nat Source
Логарифм по основанию 2 (округление вниз) натуральных чисел. Log 0 не определено (т.е. его нельзя упростить).
С версии: base-4.11.0.0
type family AppendSymbol (m :: Symbol) (n :: Symbol) :: Symbol Source
Конкатенация символов на уровне типов.
С версии: base-4.10.0.0
type family CmpNat (m :: Nat) (n :: Nat) :: Ordering Source
Сравнение натуральных чисел на уровне типов, как функция.
С версии: base-4.7.0.0
type family CmpSymbol (m :: Symbol) (n :: Symbol) :: Ordering Source
Сравнение символов на уровне типов, как функция.
С версии: base-4.7.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.")
С версии: base-4.9.0.0
data ErrorMessage Source
Описание пользовательской ошибки типа.
Конструкторы
| Text Symbol | Отображает текст как есть. |
| forall t. 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/8.10.2/docs/html/libraries/base-4.14.1.0/GHC-TypeLits.html