Spec-Zone.ru › Haskell 9

GHC.TypeError

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

Описание

Этот модуль экспортирует:

  • Семейство типов TypeError, используемое для создания пользовательских ошибок типов. Это аналог функции ошибки на уровне типов, соответствующий функции ошибки на уровне значений.
  • kind ErrorMessage, используемый для определения пользовательских сообщений об ошибках.
  • Ограничение Unsatisfiable — более принципиальный вариант TypeError, который обеспечивает более предсказуемый способ выдачи пользовательских ошибок типов.

С версии: base-4.17.0.0

data ErrorMessage Source

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

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

Text Symbol

Вывести текст без изменений.

ShowType t

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

ErrorMessage :<>: ErrorMessage infixl 6

Поместить две части сообщения об ошибке рядом друг с другом.

ErrorMessage :$$: ErrorMessage infixl 5

Расположить две части сообщения об ошибке одну над другой.

type family TypeError (a :: ErrorMessage) :: b where ... Source

Эквивалент error на уровне типов.

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

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

type family Assert (check :: Bool) errMsg where ... Source

Функция утверждения на уровне типов.

Если первый аргумент вычисляется в true, возвращается пустое ограничение; в противном случае используется второй аргумент (предполагается, что он сводится к TypeError).

Например, имея предикат на уровне типов P' :: Type -> Bool, можно написать синоним типа

type P a = Assert (P' a) (NotPError a)

где NotPError сводится к TypeError, которое сообщается при невыполнении утверждения.

С версии: base-4.17.0.0

Уравнения

Assert 'True _1 = ()
Assert _1 errMsg = errMsg

class Unsatisfiable (msg :: ErrorMessage) Source

Неудовлетворимое ограничение. При использовании с kind Constraint оно аналогично TypeError, но сообщает об ошибках более предсказуемым образом.

См. также функцию unsatisfiable.

since base-4.19.0.0.

Минимальное полное определение

unsatisfiableLifted

unsatisfiable :: forall (msg :: ErrorMessage) a. Unsatisfiable msg => a Source

Доказать что угодно в контексте с ограничением Unsatisfiable.

Это полезно для заполнения методов экземпляра, если в заголовке экземпляра есть ограничение Unsatisfiable, например:

instance Unsatisfiable (Text "No Eq instance for functions") => Eq (a -> b) where

(==) = unsatisfiable

since base-4.19.0.0.

© 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-TypeError.html

Spec-Zone.ru

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