GHC.Stack.Типы
| Авторские права | (c) Университет Глазго 2015 |
|---|---|
| Лицензия | см. libraries/ghc-prim/LICENSE |
| Поддержка | cvs-ghc@haskell.org |
| Устойчивость | внутренняя |
| Переносимость | непереносимая (расширения GHC) |
| Безопасный Haskell | Надежный |
| Язык | Haskell2010 |
Содержание
Описание
Определения типов для неявных стеков вызовов. Используйте GHC.Stack из пакета base вместо прямого импорта этого модуля.
Неявные стеки вызовов
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. Это реализационное detail, и не следует рассматривать как часть API CallStack, мы можем изменить реализацию в будущем.
С: base-4.8.1.0
Конструкторы
| EmptyCallStack | |
| PushCallStack [Символ] SrcLoc CallStack | |
| FreezeCallStack CallStack | Заморозить стек в заданном |
Примеры
type HasCallStack = ?callStack :: CallStack Источник
Запросить CallStack.
ПРИМЕЧАНИЕ: Неявный параметр ?callStack :: CallStack — это реализационный detail и не следует рассматривать как часть API CallStack, мы можем изменить реализацию в будущем.
С: base-4.9.0.0
emptyCallStack :: CallStack Источник
Пустой CallStack.
С: base-4.9.0.0
freezeCallStack :: CallStack -> CallStack Источник
Замораживает стек вызовов, предотвращая добавление дополнительных мест вызовов.
pushCallStack callSite (freezeCallStack callStack) = freezeCallStack callStack
С: base-4.9.0.0
fromCallSiteList :: [([Символ], SrcLoc)] -> CallStack Источник
Преобразует список мест вызовов в CallStack.
С: base-4.9.0.0
getCallStack :: CallStack -> [([Символ], SrcLoc)] Источник
Извлеките список мест вызовов из CallStack.
Список упорядочен по последнему вызову.
С тех пор: base-4.8.1.0
pushCallStack :: ([Символ], SrcLoc) -> CallStack -> CallStack Исходный код
Поместите место вызова в стек.
Эта функция не оказывает влияния на замороженный CallStack.
С тех пор: base-4.9.0.0
Местоположения исходного кода
data SrcLoc Исходный код
Одно местоположение в исходном коде.
С тех пор: base-4.8.1.0
Конструкторы
| SrcLoc | |
Поля
| |
Примеры
| Eq SrcLoc | С тех пор: base-4.9.0.0 |
Определено в GHC.Stack.Types Методы(==) :: SrcLoc -> SrcLoc -> Булево Исходный код (/=) :: SrcLoc -> SrcLoc -> Булево Исходный код | |
| Show SrcLoc | С тех пор: base-4.9.0.0 |
Определено в GHC.Show МетодыshowsPrec :: Целое -> SrcLoc -> ShowS Исходный код show :: SrcLoc -> Строка Исходный код showList :: [SrcLoc] -> ShowS Исходный код | |
© 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-Stack-Types.html