Hoogle Search
Within LTS Haskell 24.50 (ghc-9.10.3)
Note that Stackage only displays results for the latest LTS and Nightly snapshot. Learn more.
currentCallStack :: IO [String]base GHC.Stack.CCS Returns a [String] representing the current call stack. This can be useful for debugging. The implementation uses the call-stack simulation maintained by the profiler, so it only works if the program was compiled with -prof and contains suitable SCC annotations (e.g. by using -fprof-auto). Otherwise, the list returned is likely to be empty or uninformative.
-
base GHC.Stack.Types CallStacks are a lightweight method of obtaining a partial call-stack at any point in the program. A function can request its call-site with the HasCallStack constraint. For example, we can define
putStrLnWithCallStack :: HasCallStack => String -> IO ()
as a variant of putStrLn that will get its call-site and print it, along with the string given as argument. We can access the call-stack inside putStrLnWithCallStack with callStack.>>> :{ putStrLnWithCallStack :: HasCallStack => String -> IO () putStrLnWithCallStack msg = do putStrLn msg putStrLn (prettyCallStack callStack) :}Thus, if we call putStrLnWithCallStack we will get a formatted call-stack alongside our string.>>> putStrLnWithCallStack "hello" hello CallStack (from HasCallStack): putStrLnWithCallStack, called at <interactive>:... in interactive:Ghci...
GHC solves HasCallStack constraints in three steps:- If there is a CallStack in scope -- i.e. the enclosing function has a HasCallStack constraint -- GHC will append the new call-site to the existing CallStack.
- If there is no CallStack in scope -- e.g. in the GHCi session above -- and the enclosing definition does not have an explicit type signature, GHC will infer a HasCallStack constraint for the enclosing definition (subject to the monomorphism restriction).
- If there is no CallStack in scope and the enclosing definition has an explicit type signature, GHC will solve the HasCallStack constraint for the singleton CallStack containing just the current call-site.
-
base GHC.Stack.Types No documentation available.
FreezeCallStack :: CallStack -> CallStackbase GHC.Stack.Types Freeze the stack at the given CallStack, preventing any further call-sites from being pushed onto it.
PushCallStack :: [Char] -> SrcLoc -> CallStack -> CallStackbase GHC.Stack.Types No documentation available.
-
base GHC.Stack.Types The empty CallStack.
freezeCallStack :: CallStack -> CallStackbase GHC.Stack.Types Freeze a call-stack, preventing any further call-sites from being appended.
pushCallStack callSite (freezeCallStack callStack) = freezeCallStack callStack
fromCallSiteList :: [([Char], SrcLoc)] -> CallStackbase GHC.Stack.Types Convert a list of call-sites to a CallStack.
getCallStack :: CallStack -> [([Char], SrcLoc)]base GHC.Stack.Types Extract a list of call-sites from the CallStack. The list is ordered by most recent call.
pushCallStack :: ([Char], SrcLoc) -> CallStack -> CallStackbase GHC.Stack.Types Push a call-site onto the stack. This function has no effect on a frozen CallStack.