GHC.TypeError
| Safe Haskell | Безопасно |
|---|---|
| Язык | Haskell2010 |
Описание
Этот модуль экспортирует:
- Типовой семейство
TypeError, которое используется для предоставления пользовательских ошибок типов. Это аналог функции ошибки уровня терминов на уровне типов. - Вид
ErrorMessage, используемый для определения пользовательских сообщений об ошибках. - Ограничение
Unsatisfiable, более принципиальная вариацияTypeError, которая обеспечивает более предсказуемый способ сообщения о пользовательских ошибках типов.
С момента: base-4.17.0.0
data ErrorMessage Source
Описание пользовательской ошибки типа.
Конструкторы
| Text Symbol | Отобразить текст как есть. |
| ShowType t | Красиво вывести тип. |
| 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
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