Spec-Zone.ru › Haskell 8

GHC.Stack.Типы

Авторские права (c) Университет Глазго 2015
Лицензия см. libraries/ghc-prim/LICENSE
Поддержка cvs-ghc@haskell.org
Устойчивость внутренняя
Переносимость непереносимая (расширения GHC)
Безопасный Haskell Надежный
Язык Haskell2010

Содержание

  • Неявные стеки вызовов
  • Расположения исходного кода

Описание

Определения типов для неявных стеков вызовов. Используйте GHC.Stack из пакета base вместо прямого импорта этого модуля.

Неявные стеки вызовов

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 в трех шагах:

  1. Если в области видимости есть CallStack (т. е. у функции-окружения есть ограничение HasCallStack), GHC добавит новое место вызова к существующему стеку CallStack.
  2. Если в области видимости нет CallStack (например, в сессии GHCi выше), а у окружающего определения нет явного типа подписи, GHC выведет ограничение HasCallStack для окружающего определения (с учетом ограничения мономорфизма).
  3. Если в области видимости нет 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

Заморозить стек в заданном CallStack, предотвращая дальнейшее добавление мест вызовов.

Примеры
Подробности примеров
IsList CallStack

Обратите внимание, что 'fromList . toList = id' только для незамороженных CallStack , так как toList удаляет информацию о замороженности.

С: 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
Подробности примера

Определено в GHC.Exts

type Элемент CallStack = (Строка, SrcLoc)

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

Поля

  • srcLocPackage :: [Символ]
  • srcLocModule :: [Символ]
  • srcLocFile :: [Символ]
  • srcLocStartLine :: Целое
  • srcLocStartCol :: Целое
  • srcLocEndLine :: Целое
  • srcLocEndCol :: Целое
Примеры
Подробности примеров
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

END_OF_DOCUMENT_MARKER

Spec-Zone.ru

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