Spec-Zone.ru › Haskell 8

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)

Например, Fixed 1000 даст вам Fixed, с разрешением 1000.

Подробности реализации

Определено в 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

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

forall n.KnownNat n => SomeNat (Proxy n)
Примеры использования
Подробности примеров использования
Eq SomeNat

С момента: base-4.7.0.0

Подробности примера использования

Определено в GHC.TypeNats

Методы

== :: SomeNat -> SomeNat -> Bool Исходный код

/= :: SomeNat -> SomeNat -> Bool Исходный код

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] Исходный код

readPrec :: ReadPrec SomeNat Исходный код

readListPrec :: ReadPrec [SomeNat] Исходный код

Show SomeNat

С момента: base-4.7.0.0

Подробности примера использования

Определено в GHC.TypeNats

Методы

showsPrec :: Int -> SomeNat -> ShowS Исходный код

show :: SomeNat -> String Исходный код

showList :: [SomeNat] -> ShowS Исходный код

тип SomeSymbol Исходный код

Этот тип представляет неизвестные символы уровня типов.

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

forall n.KnownSymbol n => SomeSymbol (Proxy n)

С момента: base-4.7.0.0

Примеры использования
Подробности примеров использования
Eq SomeSymbol

С момента выпуска: base-4.7.0.0

Подробности примера

Определено в GHC.TypeLits

Методы

(==) :: SomeSymbol -> SomeSymbol -> Bool Источник

(/=) :: SomeSymbol -> SomeSymbol -> Bool Источник

Ord SomeSymbol

С момента выпуска: base-4.7.0.0

Подробности примера

Определено в GHC.TypeLits

Методы

compare :: SomeSymbol -> SomeSymbol -> Ordering Источник

(<) :: SomeSymbol -> SomeSymbol -> Bool Источник

(<=) :: SomeSymbol -> SomeSymbol -> Bool Источник

(>) :: SomeSymbol -> SomeSymbol -> Bool Источник

(>=) :: SomeSymbol -> SomeSymbol -> Bool Источник

max :: SomeSymbol -> SomeSymbol -> SomeSymbol Источник

min :: SomeSymbol -> SomeSymbol -> SomeSymbol Источник

Read SomeSymbol

С момента выпуска: base-4.7.0.0

Подробности примера

Определено в GHC.TypeLits

Методы

readsPrec :: Int -> ReadS SomeSymbol Источник

readList :: ReadS [SomeSymbol] Источник

readPrec :: ReadPrec SomeSymbol Источник

readListPrec :: ReadPrec [SomeSymbol] Источник

Show SomeSymbol

С момента выпуска: base-4.7.0.0

Подробности примера

Определено в GHC.TypeLits

Методы

showsPrec :: Int -> SomeSymbol -> ShowS Источник

show :: SomeSymbol -> String Источник

showList :: [SomeSymbol] -> ShowS Источник

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

Красиво выводит тип. ShowType :: k -> ErrorMessage

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

Spec-Zone.ru

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