Spec-Zone.ru › Haskell 9

GHC.TypeLits

Безопасный Haskell Safe
Язык Haskell2010

Содержание

  • Виды
  • Связывание уровня типов и уровня значений
    • Синглтонные значения
  • Функции над литералами типов
  • Пользовательские ошибки типов

Описание

Языковое расширение DataKinds в GHC поднимает конструкторы данных, натуральные числа и строки на уровень типов. Этот модуль предоставляет примитивы, необходимые для работы с числами на уровне типов (вид Nat), строками (вид Symbol) и символами (вид Char). В нём также определяется семейство типов TypeError — возможность, использующая строки на уровне типов для поддержки пользовательских ошибок типов.

Пока этот модуль служит API для работы с литералами на уровне типов. Однако обратите внимание, что он находится в разработке и может измениться. Когда конструкция DataKinds станет более стабильной, этот модуль будет считаться только внутренним модулем GHC, а интерфейс программиста для работы с данными на уровне типов будет определён в отдельной библиотеке.

Начиная с: base-4.6.0.0

Виды

data Natural Источник

Натуральное число

Инвариант: числа <= 0xffffffffffffffff используют конструктор NS

Экземпляры
Подробности экземпляров
PrintfArg Natural Исходный код

Начиная с: base-4.8.0.0

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

Определено в Text.Printf

Методы

formatArg :: Natural -> FieldFormatter Исходный код

parseFormat :: Natural -> ModifierParser Исходный код

Bits Natural Исходный код

Начиная с: base-4.8.0

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

Определено в GHC.Internal.Bits

Методы

(.&.) :: Natural -> Natural -> Natural Исходный код

(.|.) :: Natural -> Natural -> Natural Исходный код

xor :: Natural -> Natural -> Natural Исходный код

complement :: Natural -> Natural Исходный код

shift :: Natural -> Int -> Natural Исходный код

rotate :: Natural -> Int -> Natural Исходный код

zeroBits :: Natural Исходный код

bit :: Int -> Natural Исходный код

setBit :: Natural -> Int -> Natural Исходный код

clearBit :: Natural -> Int -> Natural Исходный код

complementBit :: Natural -> Int -> Natural Исходный код

testBit :: Natural -> Int -> Bool Исходный код

bitSizeMaybe :: Natural -> Maybe Int Исходный код

bitSize :: Natural -> Int Исходный код

isSigned :: Natural -> Bool Исходный код

shiftL :: Natural -> Int -> Natural Исходный код

unsafeShiftL :: Natural -> Int -> Natural Исходный код

shiftR :: Natural -> Int -> Natural Исходный код

unsafeShiftR :: Natural -> Int -> Natural Исходный код

rotateL :: Natural -> Int -> Natural Исходный код

rotateR :: Natural -> Int -> Natural Исходный код

popCount :: Natural -> Int Исходный код

Eq Natural Исходный код
Подробности экземпляра

Определено в GHC.Internal.Bignum.Natural

Методы

(==) :: Natural -> Natural -> Bool Исходный код

(/=) :: Natural -> Natural -> Bool Исходный код

Ord Natural Исходный код
Подробности экземпляра

Определено в GHC.Internal.Bignum.Natural

Методы

compare :: Natural -> Natural -> Ordering Исходный код

(<) :: Natural -> Natural -> Bool Исходный код

(<=) :: Natural -> Natural -> Bool Исходный код

(>) :: Natural -> Natural -> Bool Исходный код

(>=) :: Natural -> Natural -> Bool Исходный код

max :: Natural -> Natural -> Natural Исходный код

min :: Natural -> Natural -> Natural Исходный код

Data Natural Исходный код

Начиная с: base-4.8.0.0

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

Определено в GHC.Internal.Data.Data

Методы

gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Natural -> c Natural Исходный код

gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c Natural Исходный код

toConstr :: Natural -> Constr Исходный код

dataTypeOf :: Natural -> DataType Исходный код

dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c Natural) Исходный код

dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Natural) Исходный код

gmapT :: (forall b. Data b => b -> b) -> Natural -> Natural Исходный код

gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Natural -> r Исходный код

gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Natural -> r Исходный код

gmapQ :: (forall d. Data d => d -> u) -> Natural -> [u] Исходный код

gmapQi :: Int -> (forall d. Data d => d -> u) -> Natural -> u Исходный код

gmapM :: Monad m => (forall d. Data d => d -> m d) -> Natural -> m Natural Исходный код

gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Natural -> m Natural Исходный код

gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Natural -> m Natural Исходный код

Enum Natural Исходный код

Начиная с: base-4.8.0.0

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

Определено в GHC.Internal.Enum

Методы

succ :: Natural -> Natural Исходный код

pred :: Natural -> Natural Исходный код

toEnum :: Int -> Natural Исходный код

fromEnum :: Natural -> Int Исходный код

enumFrom :: Natural -> [Natural] Исходный код

enumFromThen :: Natural -> Natural -> [Natural] Исходный код

enumFromTo :: Natural -> Natural -> [Natural] Исходный код

enumFromThenTo :: Natural -> Natural -> Natural -> [Natural] Исходный код

Ix Natural Исходный код

Начиная с: base-4.8.0.0

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

Определено в GHC.Internal.Ix

Методы

range :: (Natural, Natural) -> [Natural] Исходный код

index :: (Natural, Natural) -> Natural -> Int Исходный код

unsafeIndex :: (Natural, Natural) -> Natural -> Int Исходный код

inRange :: (Natural, Natural) -> Natural -> Bool Исходный код

rangeSize :: (Natural, Natural) -> Int Исходный код

unsafeRangeSize :: (Natural, Natural) -> Int Исходный код

Num Natural Исходный код

Обратите внимание: экземпляр Num для Natural не образует кольцо: только у 0 есть аддитивный обратный элемент. Однако он образует полукольцо.

Начиная с: base-4.8.0.0

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

Определено в GHC.Internal.Num

Методы

(+) :: Natural -> Natural -> Natural Источник

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

(*) :: Natural -> Natural -> Natural Источник

negate :: Natural -> Natural Источник

abs :: Natural -> Natural Источник

signum :: Natural -> Natural Источник

fromInteger :: Integer -> Natural Источник

Read Natural Источник

Начиная с: base-4.8.0.0

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

Определено в GHC.Internal.Read

Методы

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

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

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

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

Integral Natural Источник

Начиная с: base-4.8.0.0

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

Определено в GHC.Internal.Real

Методы

quot :: Natural -> Natural -> Natural Источник

rem :: Natural -> Natural -> Natural Источник

div :: Natural -> Natural -> Natural Источник

mod :: Natural -> Natural -> Natural Источник

quotRem :: Natural -> Natural -> (Natural, Natural) Источник

divMod :: Natural -> Natural -> (Natural, Natural) Источник

toInteger :: Natural -> Integer Источник

Real Natural Источник

Начиная с: base-4.8.0.0

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

Определено в GHC.Internal.Real

Методы

toRational :: Natural -> Rational Источник

Show Natural Источник

Начиная с: base-4.8.0.0

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

Определено в GHC.Internal.Show

Методы

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

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

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

KnownNat n => HasResolution (n :: Nat) Источник

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

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

Определено в Data.Fixed

Методы

resolution :: p n -> Integer Источник

TestCoercion SNat Источник

Начиная с: base-4.18.0.0

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

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

Методы

testCoercion :: forall (a :: Nat) (b :: Nat). SNat a -> SNat b -> Maybe (Coercion a b) Источник

TestEquality SNat Источник

Начиная с: base-4.18.0.0

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

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

Методы

testEquality :: forall (a :: Nat) (b :: Nat). SNat a -> SNat b -> Maybe (a :~: b) Источник

Lift Natural Источник
Подробности экземпляра

Определено в GHC.Internal.TH.Lift

Методы

lift :: Quote m => Natural -> m Exp Источник

liftTyped :: forall (m :: Type -> Type). Quote m => Natural -> Code m Natural Источник

type Compare (a :: Natural) (b :: Natural) Источник
Подробности экземпляра

Определено в GHC.Internal.Data.Type.Ord

type Compare (a :: Natural) (b :: Natural) = CmpNat a b

type Nat = Natural Источник

Синоним типа для Natural.

Ранее это был непрозрачный тип данных, но его заменили синонимом типа.

Начиная с: base-4.16.0.0

data Symbol Источник

(Род) Это род символов на уровне типов.

Экземпляры
Подробности экземпляров
SingKind Symbol

Начиная с: base-4.9.0.0

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

Определено в GHC.Internal.Generics

Связанные типы

type DemoteRep Symbol
Подробности экземпляра

Определено в GHC.Internal.Generics

type DemoteRep Symbol = String

Методы

fromSing :: forall (a :: Symbol). Sing a -> DemoteRep Symbol

TestCoercion SSymbol Источник

Начиная с: base-4.18.0.0

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

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

Методы

testCoercion :: forall (a :: Symbol) (b :: Symbol). SSymbol a -> SSymbol b -> Maybe (Coercion a b) Источник

TestEquality SSymbol Источник

Начиная с: base-4.18.0.0

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

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

Методы

testEquality :: forall (a :: Symbol) (b :: Symbol). SSymbol a -> SSymbol b -> Maybe (a :~: b) Источник

KnownSymbol a => SingI (a :: Symbol)

Начиная с: base-4.9.0.0

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

Определено в GHC.Internal.Generics

Методы

sing :: Sing a

type DemoteRep Symbol Источник
Подробности экземпляра

Определено в GHC.Internal.Generics

type DemoteRep Symbol = String
data Sing (s :: Symbol) Источник
Подробности экземпляра

Определено в GHC.Internal.Generics

data Sing (s :: Symbol) where
  • SSym :: forall (s :: Symbol). KnownSymbol s => Sing s
type Compare (a :: Symbol) (b :: Symbol) Источник
Подробности экземпляра

Определено в GHC.Internal.Data.Type.Ord

type Compare (a :: Symbol) (b :: Symbol) = CmpSymbol a b

Связывание уровней типов и значений

class KnownNat (n :: Nat) where Источник

Этот класс предоставляет целое число, соответствующее натуральному числу на уровне типов. Для каждого конкретного литерала существуют экземпляры этого класса: 0, 1, 2 и т. д.

Начиная с: base-4.7.0.0

Методы

natSing :: SNat n Источник

natVal :: forall (n :: Nat) proxy. KnownNat n => proxy n -> Integer Источник

Начиная с: base-4.7.0.0

natVal' :: forall (n :: Nat). KnownNat n => Proxy# n -> Integer Источник

Начиная с: base-4.8.0.0

class KnownSymbol (n :: Symbol) where Источник

Этот класс предоставляет строку, соответствующую символу на уровне типов. Для каждого конкретного литерала существуют экземпляры этого класса: "hello" и т. д.

Начиная с: base-4.7.0.0

Методы

symbolSing :: SSymbol n Источник

symbolVal :: forall (n :: Symbol) proxy. KnownSymbol n => proxy n -> String Источник

Начиная с: base-4.7.0.0

symbolVal' :: forall (n :: Symbol). KnownSymbol n => Proxy# n -> String Исходный код

Начиная с: base-4.8.0.0

class KnownChar (n :: Char) where Исходный код

Начиная с: base-4.16.0.0

Методы

charSing :: SChar n Исходный код

charVal :: forall (n :: Char) proxy. KnownChar n => proxy n -> Char Исходный код

charVal' :: forall (n :: Char). KnownChar n => Proxy# n -> Char Исходный код

data SomeNat Исходный код

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

Начиная с: base-4.10.0.0

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

KnownNat n => SomeNat (Proxy n)
Экземпляры
Подробности экземпляров
Eq SomeNat Исходный код

Начиная с: base-4.7.0.0

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

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

Методы

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

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

Ord SomeNat Исходный код

Начиная с: base-4.7.0.0

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

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

Методы

readsPrec :: Int -> ReadS SomeNat Исходный код

readList :: ReadS [SomeNat] Исходный код

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

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

Show SomeNat Исходный код

Начиная с: base-4.7.0.0

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

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

Методы

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

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

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

data SomeSymbol Исходный код

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

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

KnownSymbol n => SomeSymbol (Proxy n)

Начиная с: base-4.7.0.0

Экземпляры
Подробности экземпляров
Eq SomeSymbol Исходный код

Начиная с: base-4.7.0.0

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

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

Методы

(==) :: SomeSymbol -> SomeSymbol -> Bool Исходный код

(/=) :: SomeSymbol -> SomeSymbol -> Bool Исходный код

Ord SomeSymbol Исходный код

Начиная с: base-4.7.0.0

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

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

Методы

readsPrec :: Int -> ReadS SomeSymbol Исходный код

readList :: ReadS [SomeSymbol] Исходный код

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

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

Show SomeSymbol Исходный код

Начиная с: base-4.7.0.0

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

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

Методы

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

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

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

data SomeChar Исходный код

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

KnownChar n => SomeChar (Proxy n)
Экземпляры
Сведения об экземплярах
Eq SomeChar Исходный код
Сведения об экземпляре

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

Методы

(==) :: SomeChar -> SomeChar -> Bool Исходный код

(/=) :: SomeChar -> SomeChar -> Bool Исходный код

Ord SomeChar Исходный код
Сведения об экземпляре

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

Методы

compare :: SomeChar -> SomeChar -> Ordering Исходный код

(<) :: SomeChar -> SomeChar -> Bool Исходный код

(<=) :: SomeChar -> SomeChar -> Bool Исходный код

(>) :: SomeChar -> SomeChar -> Bool Исходный код

(>=) :: SomeChar -> SomeChar -> Bool Исходный код

max :: SomeChar -> SomeChar -> SomeChar Исходный код

min :: SomeChar -> SomeChar -> SomeChar Исходный код

Read SomeChar Исходный код
Сведения об экземпляре

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

Методы

readsPrec :: Int -> ReadS SomeChar Исходный код

readList :: ReadS [SomeChar] Исходный код

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

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

Show SomeChar Исходный код
Сведения об экземпляре

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

Методы

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

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

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

someNatVal :: Integer -> Maybe SomeNat Исходный код

Преобразует целое число в неизвестное натуральное число на уровне типов.

Начиная с: base-4.7.0.0

someSymbolVal :: String -> SomeSymbol Исходный код

Преобразует строку в неизвестный символ на уровне типов.

Начиная с: base-4.7.0.0

someCharVal :: Char -> SomeChar Исходный код

Преобразует символ в неизвестный символ на уровне типов.

Начиная с: base-4.16.0.0

sameNat :: forall (a :: Nat) (b :: Nat) proxy1 proxy2. (KnownNat a, KnownNat b) => proxy1 a -> proxy2 b -> Maybe (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) Исходный код

Мы либо получаем доказательство того, что эта функция была инстанцирована с одинаковыми символами на уровне типов, либо Nothing.

Начиная с: base-4.7.0.0

sameChar :: forall (a :: Char) (b :: Char) proxy1 proxy2. (KnownChar a, KnownChar b) => proxy1 a -> proxy2 b -> Maybe (a :~: b) Исходный код

Мы либо получаем доказательство того, что эта функция была инстанцирована с одинаковыми символами на уровне типов, либо Nothing.

Начиная с: 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) Исходный код

Мы либо получаем доказательство того, что эта функция была инстанцирована с одинаковыми числами на уровне типов, либо доказательство того, что числа на уровне типов различны.

Начиная с: 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) Исходный код

Мы либо получаем доказательство того, что эта функция была инстанцирована с одинаковыми символами на уровне типов, либо доказательство того, что символы на уровне типов различны.

Начиная с: 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) Исходный код

Мы либо получаем доказательство того, что эта функция была инстанцирована с одинаковыми символами на уровне типов, либо доказательство того, что символы на уровне типов различны.

Начиная с: base-4.19.0.0

data OrderingI (a :: k) (b :: k) where Исходный код

Тип данных Ordering для типовых литералов, предоставляющий доказательство их порядка.

Начиная с: 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
Экземпляры
Сведения об экземплярах
Eq (OrderingI a b) Исходный код
Сведения об экземпляре

Определено в GHC.Internal.Data.Type.Ord

Методы

(==) :: OrderingI a b -> OrderingI a b -> Bool Исходный код

(/=) :: OrderingI a b -> OrderingI a b -> Bool Исходный код

Show (OrderingI a b) Исходный код
Сведения об экземпляре

Определено в GHC.Internal.Data.Type.Ord

Методы

showsPrec :: Int -> OrderingI a b -> ShowS Исходный код

show :: OrderingI a b -> String Исходный код

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

cmpNat :: forall (a :: Nat) (b :: Nat) proxy1 proxy2. (KnownNat a, KnownNat b) => proxy1 a -> proxy2 b -> OrderingI a b Исходный код

Подобно sameNat, но если числа не равны, функция также предоставляет доказательство LT или GT.

Начиная с: base-4.16.0.0

cmpSymbol :: forall (a :: Symbol) (b :: Symbol) proxy1 proxy2. (KnownSymbol a, KnownSymbol b) => proxy1 a -> proxy2 b -> OrderingI a b Исходный код

Подобно sameSymbol, но если символы не равны, функция также предоставляет доказательство LT или GT.

Начиная с: base-4.16.0.0

cmpChar :: forall (a :: Char) (b :: Char) proxy1 proxy2. (KnownChar a, KnownChar b) => proxy1 a -> proxy2 b -> OrderingI a b Исходный код

Подобно sameChar, но если символы Char не равны, функция также предоставляет доказательство LT или GT.

Начиная с: base-4.16.0.0

Синглетонные значения

data SNat (n :: Nat) Исходный код

Свидетельство на уровне значений для натурального числа на уровне типов. Этот тип обычно называют синглетонным, поскольку для каждого n существует единственное значение, принадлежащее типу SNat n (кроме нижнего значения).

Определение SNat намеренно оставлено абстрактным. Чтобы получить значение SNat, используйте один из следующих способов:

  1. Метод natSing класса KnownNat.
  2. Синоним шаблона SNat.
  3. Функцию withSomeSNat, создающую SNat из числа Natural.

Начиная с: base-4.18.0.0

Экземпляры
Подробности экземпляров
TestCoercion SNat Источник

Начиная с: base-4.18.0.0

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

Определён в GHC.Internal.TypeNats

Методы

testCoercion :: forall (a :: Nat) (b :: Nat). SNat a -> SNat b -> Maybe (Coercion a b) Источник

TestEquality SNat Источник

Начиная с: base-4.18.0.0

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

Определён в GHC.Internal.TypeNats

Методы

testEquality :: forall (a :: Nat) (b :: Nat). SNat a -> SNat b -> Maybe (a :~: b) Источник

Eq (SNat n) Источник

Начиная с: base-4.19.0.0

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

Определён в GHC.Internal.TypeNats

Методы

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

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

Ord (SNat n) Источник

Начиная с: base-4.19.0.0

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

Определён в GHC.Internal.TypeNats

Методы

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

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

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

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

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

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

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

Show (SNat n) Источник

Начиная с: base-4.18.0.0

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

Определён в GHC.Internal.TypeNats

Методы

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

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

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

data SSymbol (s :: Symbol) Источник

Значение-свидетель для символа на уровне типов. Обычно такой тип называют синглтонным: для каждого s существует единственное значение, принадлежащее типу SSymbol s (за исключением bottom).

Определение SSymbol намеренно оставлено абстрактным. Чтобы получить значение SSymbol, используйте один из следующих вариантов:

  1. Метод symbolSing класса KnownSymbol.
  2. Синоним шаблона SSymbol.
  3. Функцию withSomeSSymbol, которая создаёт SSymbol из String.

Начиная с: base-4.18.0.0

Экземпляры
Подробности экземпляров
TestCoercion SSymbol Источник

Начиная с: base-4.18.0.0

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

Определён в GHC.Internal.TypeLits

Методы

testCoercion :: forall (a :: Symbol) (b :: Symbol). SSymbol a -> SSymbol b -> Maybe (Coercion a b) Источник

TestEquality SSymbol Источник

Начиная с: base-4.18.0.0

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

Определён в GHC.Internal.TypeLits

Методы

testEquality :: forall (a :: Symbol) (b :: Symbol). SSymbol a -> SSymbol b -> Maybe (a :~: b) Источник

Eq (SSymbol s) Источник

Начиная с: base-4.19.0.0

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

Определён в GHC.Internal.TypeLits

Методы

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

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

Ord (SSymbol s) Источник

Начиная с: base-4.19.0.0

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

Определён в GHC.Internal.TypeLits

Методы

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

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

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

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

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

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

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

Show (SSymbol s) Источник

Начиная с: base-4.18.0.0

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

Определён в GHC.Internal.TypeLits

Методы

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

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

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

data SChar (s :: Char) Источник

Значение-свидетель для символа на уровне типов. Обычно такой тип называют синглтонным: для каждого c существует единственное значение, принадлежащее типу SChar c (за исключением bottom).

Определение SChar намеренно оставлено абстрактным. Чтобы получить значение SChar, используйте один из следующих вариантов:

  1. Метод charSing класса KnownChar.
  2. Синоним шаблона SChar.
  3. Функцию withSomeSChar, которая создаёт SChar из Char.

Начиная с: base-4.18.0.0

Экземпляры
Сведения об экземплярах
TestCoercion SChar Источник

Начиная с: base-4.18.0.0

Сведения об экземпляре

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

Методы

testCoercion :: forall (a :: Char) (b :: Char). SChar a -> SChar b -> Maybe (Coercion a b) Источник

TestEquality SChar Источник

Начиная с: base-4.18.0.0

Сведения об экземпляре

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

Методы

testEquality :: forall (a :: Char) (b :: Char). SChar a -> SChar b -> Maybe (a :~: b) Источник

Eq (SChar c) Источник

Начиная с: base-4.19.0.0

Сведения об экземпляре

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

Методы

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

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

Ord (SChar c) Источник

Начиная с: base-4.19.0.0

Сведения об экземпляре

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

Методы

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

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

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

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

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

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

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

Show (SChar c) Источник

Начиная с: base-4.18.0.0

Сведения об экземпляре

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

Методы

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

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

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

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 -}

Начиная с: 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 Источник

Деление натуральных чисел (с округлением вниз). Div x 0 не определено (то есть не может быть сведено).

Начиная с: base-4.11.0.0

type family Mod (a :: Natural) (b :: Natural) :: Natural where ... infixl 7 Источник

Остаток от деления натуральных чисел. Mod x 0 не определено (то есть не может быть сведено).

Начиная с: base-4.11.0.0

type family Log2 (a :: Natural) :: Natural where ... Источник

Логарифм натуральных чисел по основанию 2 (с округлением вниз). Log 0 не определено (то есть не может быть сведено).

Начиная с: base-4.11.0.0

type family AppendSymbol (a :: Symbol) (b :: Symbol) :: Symbol where ... Источник

Конкатенация символов на уровне типов.

Начиная с: base-4.10.0.0

type family CmpNat (a :: Natural) (b :: Natural) :: Ordering where ... Источник

Сравнение натуральных чисел на уровне типов в виде функции.

Начиная с: base-4.7.0.0

type family CmpSymbol (a :: Symbol) (b :: Symbol) :: Ordering where ... Источник

Сравнение символов на уровне типов в виде функции.

Начиная с: base-4.7.0.0

type family CmpChar (a :: Char) (b :: Char) :: Ordering where ... Источник

Сравнение символов на уровне типов.

Начиная с: base-4.16.0.0

type family ConsSymbol (a :: Char) (b :: Symbol) :: Symbol where ... Источник

Добавление символа на уровне типов в начало символа на уровне типов

Начиная с: base-4.16.0.0

type family UnconsSymbol (a :: Symbol) :: Maybe (Char, Symbol) where ... Источник

Это семейство типов возвращает значение Just на уровне типов, содержащее первый символ символа и его хвост, если оно определено, и Nothing в противном случае.

Начиная с: base-4.16.0.0

type family CharToNat (a :: Char) :: Natural where ... Источник

Преобразует символ в его кодовую точку Unicode (ср. ord)

Начиная с: base-4.16.0.0

type family NatToChar (a :: Natural) :: Char where ... Источник

Преобразует кодовую точку Unicode в символ (ср. chr)

Начиная с: base-4.16.0.0

Пользовательские ошибки типов

type family TypeError (a :: ErrorMessage) :: b where ... Источник

Эквивалент 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 Источник

Описание пользовательской ошибки типов.

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

Text Symbol

Показать текст без изменений.

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/9.14.1/docs/libraries/base-4.22.0.0-66f8/GHC-TypeLits.html

Spec-Zone.ru

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