Spec-Zone.ru › Haskell 9

GHC.TypeError

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

Описание

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

  • Типовой семейство TypeError, которое используется для предоставления пользовательских ошибок типов. Это аналог функции ошибки уровня терминов на уровне типов.
  • Вид 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.

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

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

Функция уровня типа assert.

Если первый аргумент оценивается как истина, возвращается пустое ограничение, в противном случае используется второй аргумент (который должен свестись к 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

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

См. также функцию 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.12.1/docs/libraries/base-4.21.0.0-8e62/GHC-TypeError.html

Spec-Zone.ru

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