| Safe Haskell | None |
|---|---|
| Language | Haskell2010 |
Hedgehog.Internal.Source
Contents
Synopsis
- newtype LineNo = LineNo {}
- newtype ColumnNo = ColumnNo {
- unColumnNo :: Int
- data Span = Span {
- spanFile :: !FilePath
- spanStartLine :: !LineNo
- spanStartColumn :: !ColumnNo
- spanEndLine :: !LineNo
- spanEndColumn :: !ColumnNo
- getCaller :: CallStack -> Maybe Span
- data CallStack
- type HasCallStack = ?callStack :: CallStack
- callStack :: HasCallStack => CallStack
- withFrozenCallStack :: HasCallStack => (HasCallStack => a) -> a
Documentation
Instances
| Enum LineNo Source # | |
Defined in Hedgehog.Internal.Source Methods succ :: LineNo -> LineNo Source # pred :: LineNo -> LineNo Source # toEnum :: Int -> LineNo Source # fromEnum :: LineNo -> Int Source # enumFrom :: LineNo -> [LineNo] Source # enumFromThen :: LineNo -> LineNo -> [LineNo] Source # enumFromTo :: LineNo -> LineNo -> [LineNo] Source # enumFromThenTo :: LineNo -> LineNo -> LineNo -> [LineNo] Source # | |
| Num LineNo Source # | |
Defined in Hedgehog.Internal.Source | |
| Integral LineNo Source # | |
Defined in Hedgehog.Internal.Source | |
| Real LineNo Source # | |
Defined in Hedgehog.Internal.Source Methods toRational :: LineNo -> Rational Source # | |
| Show LineNo Source # | |
| Eq LineNo Source # | |
| Ord LineNo Source # | |
Constructors
| ColumnNo | |
Fields
| |
Instances
Constructors
| Span | |
Fields
| |
Re-exports from GHC.Stack
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
CallStackin scope -- i.e. the enclosing function has aHasCallStackconstraint -- GHC will append the new call-site to the existingCallStack. - If there is no
CallStackin scope -- e.g. in the GHCi session above -- and the enclosing definition does not have an explicit type signature, GHC will infer aHasCallStackconstraint for the enclosing definition (subject to the monomorphism restriction). - If there is no
CallStackin scope and the enclosing definition has an explicit type signature, GHC will solve theHasCallStackconstraint for the singletonCallStackcontaining just the current call-site.
CallStacks do not interact with the RTS and do not require compilation
with -prof. On the other hand, as they are built up explicitly via the
HasCallStack constraints, they will generally not contain as much
information as the simulated call-stacks maintained by the RTS.
A CallStack is a [(String, SrcLoc)]. The String is the name of
function that was called, the SrcLoc is the call-site. The list is
ordered with the most recently called function at the head.
NOTE: The intrepid user may notice that HasCallStack is just an
alias for an implicit parameter ?callStack :: CallStack. This is an
implementation detail and should not be considered part of the
CallStack API, we may decide to change the implementation in the
future.
Since: base-4.8.1.0
Instances
| NFData CallStack | Since: deepseq-1.4.2.0 | ||||
Defined in Control.DeepSeq | |||||
| IsList CallStack | Be aware that 'fromList . toList = id' only for unfrozen Since: base-4.9.0.0 | ||||
Defined in GHC.Internal.IsList Associated Types
| |||||
| Show CallStack | Since: base-4.9.0.0 | ||||
| type Item CallStack | |||||
Defined in GHC.Internal.IsList | |||||
type HasCallStack = ?callStack :: CallStack Source #
Request a CallStack.
NOTE: The implicit parameter ?callStack :: CallStack is an
implementation detail and should not be considered part of the
CallStack API, we may decide to change the implementation in the
future.
Since: base-4.9.0.0
callStack :: HasCallStack => CallStack Source #
withFrozenCallStack :: HasCallStack => (HasCallStack => a) -> a Source #
Perform some computation without adding new entries to the CallStack.
Since: base-4.9.0.0