GHC.Exception
| Copyright | (c) The University of Glasgow 1998-2002 |
|---|---|
| License | see libraries/base/LICENSE |
| Maintainer | cvs-ghc@haskell.org |
| Stability | internal |
| Portability | non-portable (GHC extensions) |
| Safe Haskell | Trustworthy |
| Language | Haskell2010 |
Описание
Исключения и функции обработки исключений.
module GHC.Exception.Type
throw :: forall (r :: RuntimeRep). forall (a :: TYPE r). forall e. Exception e => e -> a Source
Выбросить исключение. Исключения могут быть выброшены из чисто функционального кода, но могут быть перехвачены только внутри IO монады.
Это исключение возникает, когда пользователь вызывает error. Первый String — это аргумент, переданный в error, второй String — это местоположение.
Конструкторы
| ErrorCallWithLocation String String |
Экземпляры
| Eq ErrorCall | Since: base-4.7.0.0 |
| Ord ErrorCall | Since: base-4.7.0.0 |
Определено в GHC.Exception | |
| Show ErrorCall | Since: base-4.0.0.0 |
| Exception ErrorCall | Since: base-4.0.0.0 |
Определено в GHC.Exception МетодыtoException :: ErrorCall -> SomeException Source | |
errorCallWithCallStackException :: Строка -> CallStack -> SomeException Исходный код
data CallStack Исходный код
CallStack представляют собой лёгкий способ получения частичного стека вызовов в любой точке программы.
Функция может запросить своё место вызова с помощью HasCallStack ограничения. Например, мы можем определить
putStrLnWithCallStack :: HasCallStack => String -> IO ()
как вариант putStrLn, который получит своё место вызова и выведет его, вместе со строкой, переданной в качестве аргумента. Мы можем получить доступ к стеку вызовов внутри putStrLnWithCallStack с помощью callStack.
putStrLnWithCallStack :: HasCallStack => String -> IO () putStrLnWithCallStack msg = do putStrLn msg putStrLn (prettyCallStack callStack)
Таким образом, если мы вызовем putStrLnWithCallStack, мы получим отформатированный стек вызовов вместе с нашей строкой.
>>> putStrLnWithCallStack "hello" hello CallStack (from HasCallStack): putStrLnWithCallStack, called at <interactive>:2:1 in interactive:Ghci1
GHC решает HasCallStack ограничения в три этапа:
- Если в области видимости есть
CallStack— т.е. у функции-обертки естьHasCallStackограничение — GHC добавит новое место вызова к существующемуCallStack. - Если в области видимости нет
CallStack— например, в сессии GHCi выше — и у определения-обертки нет явного типа подписи, GHC выведетHasCallStackограничение для определения-обертки (с учётом ограничения мономорфизма). - Если в области видимости нет
CallStackи у определения-обертки есть явная подпись типа, GHC решитHasCallStackограничение для одиночногоCallStack, содержащего только текущее место вызова.
CallStack не взаимодействуют с RTS и не требуют компиляции с -prof. С другой стороны, поскольку они построены явно через HasCallStack ограничения, они, как правило, не содержат столько же информации, сколько симулируемые стеки вызовов, поддерживаемые RTS.
CallStack — это [(String, SrcLoc)] . String — это имя функции, которая была вызвана, SrcLoc — место вызова. Список отсортирован по тому, какая функция была вызвана последней.
ПРИМЕЧАНИЕ: внимательный пользователь может заметить, что HasCallStack — это просто псевдоним для неявного параметра ?callStack :: CallStack. Это деталь реализации, и не следует считать её частью CallStack API; мы можем изменить реализацию в будущем.
С момента: base-4.8.1.0
Примеры использования
| IsList CallStack |
Обратите внимание, что 'fromList . toList = id' только для размороженных С момента: base-4.9.0.0 |
Определено в GHC.Exts Связанные типыtype Элемент CallStack Исходный код МетодыfromList :: [Элемент CallStack] -> CallStack Исходный код fromListN :: Целое число -> [Элемент CallStack] -> CallStack Исходный код toList :: CallStack -> [Элемент CallStack] Исходный код | |
| Show CallStack | С момента: base-4.9.0.0 |
Определено в GHC.Show МетодыshowsPrec :: Целое число -> CallStack -> ShowS Исходный код show :: CallStack -> Строка Исходный код showList :: [CallStack] -> ShowS Исходный код | |
| type Элемент CallStack | |
fromCallSiteList :: [([Символ], SrcLoc)] -> CallStack Исходный код
Преобразовать список мест вызовов в CallStack.
С момента: base-4.9.0.0
getCallStack :: CallStack -> [([Символ], SrcLoc)] Исходный код
Извлечь список мест вызовов из CallStack.
Список отсортирован по последнему вызову.
С момента: base-4.8.1.0
prettyCallStack :: CallStack -> Строка Исходный код
Красиво вывести CallStack.
С момента: base-4.9.0.0
prettyCallStackLines :: CallStack -> [Строка] Исходный код
showCCSStack :: [Строка] -> [Строка] Исходный код
data SrcLoc Исходный код
Одно местоположение в исходном коде.
С момента: base-4.8.1.0
Конструкторы
| SrcLoc | |
Поля
| |
prettySrcLoc :: SrcLoc -> String Источник
Красивый вывод SrcLoc.
С версии: base-4.9.0.0
© The University of Glasgow and others
Licensed under a BSD-style license (see top of the page).
https://downloads.haskell.org/~ghc/8.10.2/docs/html/libraries/base-4.14.1.0/GHC-Exception.html