GHC.TypeError
| Безопасный Haskell | Safe |
|---|---|
| Язык | Haskell2010 |
Описание
Этот модуль экспортирует:
- Семейство типов
TypeError, используемое для создания пользовательских ошибок типов. Это аналог функции ошибки на уровне типов, соответствующий функции ошибки на уровне значений. - kind
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 на уровне типов.
Полиморфный 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
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