Relude.Extra.CallStack

relude-1.2.2.0: Safe, performant, user-friendly and lightweight Haskell Standard Library

Copyright | (c) 2018-2023 Kowainik
License | MIT
Maintainer | Kowainik <xrom.xkov@gmail.com>
Stability | Stable
Portability | Portable
Safe Haskell | Safe
Language | Haskell2010

Relude.Extra.CallStack

Description

Contains useful functions to work with GHC callstack.

Since: 0.2.0

Synopsis

- ownName :: HasCallStack => String
- callerName :: HasCallStack => String

# Documentation

ownName :: HasCallStack => String #

This function returns the name of its caller function, but it requires that the caller function has `HasCallStack` constraint. Otherwise, it returns `"unknown"`.

    >>> foo :: HasCallStack => String; foo = ownName
    >>> foo
    "foo"
    >>> bar :: HasCallStack => String; bar = foo
    >>> bar
    "foo"

Since: 0.2.0

callerName :: HasCallStack => String #

This function returns the name of its caller of the caller function, but it requires that the caller function and caller of the caller function have `HasCallStack` constraint. Otherwise, it returns `"unknown"`. It's useful for logging:

    >>> log :: HasCallStack => String -> IO (); log s = putStrLn $ callerName ++ ":" ++ s
    >>> greeting :: HasCallStack => IO (); greeting = log "Starting..." >> putStrLn "Hello!" >> log "Ending..."
    >>> greeting
    greeting:Starting...
    Hello!
    greeting:Ending...

Since: 0.2.0