util-plus-0.1.0.0: src/GHC/Stack/Plus.hs
{-| Helper functions for dealing with call stacks and source locations.
-}
module GHC.Stack.Plus
( callerLocation
, callerFile
, callerLine
, adjustSourceFilePath
)
where
import GHC.Stack
import Safe (tailSafe, lastNote)
adjustSourceFilePath :: FilePath -> FilePath
adjustSourceFilePath = tailSafe . dropWhile (/='/') . drop 1 . dropWhile (/= '/')
callerLocation :: (HasCallStack) => String
callerLocation = callerFile ++ ":" ++ show callerLine
-- | The filename of the first caller which called a function with implicit
-- parameter @(callStack :: 'CallStack')@.
callerFile :: (HasCallStack) => String
callerFile = srcLocFile . callerSrcLoc $ callStack
-- | The line number of the first caller which called a function with
-- implicit parameter @(callStack :: 'CallStack')@.
callerLine :: (HasCallStack) => Int
callerLine = srcLocStartLine . callerSrcLoc $ callStack
callerSrcLoc :: CallStack -> SrcLoc
callerSrcLoc = snd . caller
caller :: CallStack -> (String, SrcLoc)
caller = lastNote "Empty CallStack?!" . getCallStack