hedgehog-1.5: Release with confidence.

Safe Haskell | None
Language | Haskell2010

Hedgehog.Internal.Source

Contents

- Re-exports from GHC.Stack

Synopsis

- newtype LineNo = LineNo {
  - unLineNo :: Int
  }
- 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

newtype LineNo Source #

Constructors

LineNo |

Fields

- unLineNo :: Int

#### Instances

Instances details

Enum LineNo Source # |

Instance details

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 # |
Instance details Defined in Hedgehog.Internal.Source Methods (+) :: LineNo -> LineNo -> LineNo Source # (-) :: LineNo -> LineNo -> LineNo Source # (*) :: LineNo -> LineNo -> LineNo Source # negate :: LineNo -> LineNo Source # abs :: LineNo -> LineNo Source # signum :: LineNo -> LineNo Source # fromInteger :: Integer -> LineNo Source #
Integral LineNo Source # |
Instance details Defined in Hedgehog.Internal.Source Methods quot :: LineNo -> LineNo -> LineNo Source # rem :: LineNo -> LineNo -> LineNo Source # div :: LineNo -> LineNo -> LineNo Source # mod :: LineNo -> LineNo -> LineNo Source # quotRem :: LineNo -> LineNo -> (LineNo, LineNo) Source # divMod :: LineNo -> LineNo -> (LineNo, LineNo) Source # toInteger :: LineNo -> Integer Source #
Real LineNo Source # |
Instance details Defined in Hedgehog.Internal.Source Methods toRational :: LineNo -> Rational Source #
Show LineNo Source # |
Instance details Defined in Hedgehog.Internal.Source Methods showsPrec :: Int -> LineNo -> ShowS Source # show :: LineNo -> String Source # showList :: [LineNo] -> ShowS Source #
Eq LineNo Source # |
Instance details Defined in Hedgehog.Internal.Source Methods (==) :: LineNo -> LineNo -> Bool Source # (/=) :: LineNo -> LineNo -> Bool Source #
Ord LineNo Source # |
Instance details Defined in Hedgehog.Internal.Source Methods compare :: LineNo -> LineNo -> Ordering Source # (<) :: LineNo -> LineNo -> Bool Source # (<=) :: LineNo -> LineNo -> Bool Source # (>) :: LineNo -> LineNo -> Bool Source # (>=) :: LineNo -> LineNo -> Bool Source # max :: LineNo -> LineNo -> LineNo Source # min :: LineNo -> LineNo -> LineNo Source #

newtype ColumnNo Source #

Constructors

ColumnNo |

Fields

- unColumnNo :: Int

#### Instances

Instances details

Enum ColumnNo Source # |

Instance details

Defined in Hedgehog.Internal.Source

Methods

succ :: ColumnNo -> ColumnNo Source #

pred :: ColumnNo -> ColumnNo Source #

toEnum :: Int -> ColumnNo Source #

fromEnum :: ColumnNo -> Int Source #

enumFrom :: ColumnNo -> [ColumnNo] Source #

enumFromThen :: ColumnNo -> ColumnNo -> [ColumnNo] Source #

enumFromTo :: ColumnNo -> ColumnNo -> [ColumnNo] Source #

enumFromThenTo :: ColumnNo -> ColumnNo -> ColumnNo -> [ColumnNo] Source #

Num ColumnNo Source # |
Instance details Defined in Hedgehog.Internal.Source Methods (+) :: ColumnNo -> ColumnNo -> ColumnNo Source # (-) :: ColumnNo -> ColumnNo -> ColumnNo Source # (*) :: ColumnNo -> ColumnNo -> ColumnNo Source # negate :: ColumnNo -> ColumnNo Source # abs :: ColumnNo -> ColumnNo Source # signum :: ColumnNo -> ColumnNo Source # fromInteger :: Integer -> ColumnNo Source #
Integral ColumnNo Source # |

Instance details

Defined in Hedgehog.Internal.Source

Methods

quot :: ColumnNo -> ColumnNo -> ColumnNo Source #

rem :: ColumnNo -> ColumnNo -> ColumnNo Source #

div :: ColumnNo -> ColumnNo -> ColumnNo Source #

mod :: ColumnNo -> ColumnNo -> ColumnNo Source #

quotRem :: ColumnNo -> ColumnNo -> (ColumnNo, ColumnNo) Source #

divMod :: ColumnNo -> ColumnNo -> (ColumnNo, ColumnNo) Source #

toInteger :: ColumnNo -> Integer Source #

Real ColumnNo Source # |
Instance details Defined in Hedgehog.Internal.Source Methods toRational :: ColumnNo -> Rational Source #
Show ColumnNo Source # |
Instance details Defined in Hedgehog.Internal.Source Methods showsPrec :: Int -> ColumnNo -> ShowS Source # show :: ColumnNo -> String Source # showList :: [ColumnNo] -> ShowS Source #
Eq ColumnNo Source # |
Instance details Defined in Hedgehog.Internal.Source Methods (==) :: ColumnNo -> ColumnNo -> Bool Source # (/=) :: ColumnNo -> ColumnNo -> Bool Source #
Ord ColumnNo Source # |
Instance details Defined in Hedgehog.Internal.Source Methods compare :: ColumnNo -> ColumnNo -> Ordering Source # (<) :: ColumnNo -> ColumnNo -> Bool Source # (<=) :: ColumnNo -> ColumnNo -> Bool Source # (>) :: ColumnNo -> ColumnNo -> Bool Source # (>=) :: ColumnNo -> ColumnNo -> Bool Source # max :: ColumnNo -> ColumnNo -> ColumnNo Source # min :: ColumnNo -> ColumnNo -> ColumnNo Source #

data Span Source #

Constructors

Span |

Fields

- spanFile :: !FilePath
- spanStartLine :: !LineNo
- spanStartColumn :: !ColumnNo
- spanEndLine :: !LineNo
- spanEndColumn :: !ColumnNo

#### Instances

Instances details

Show Span Source # |
Instance details Defined in Hedgehog.Internal.Source Methods showsPrec :: Int -> Span -> ShowS Source # show :: Span -> String Source # showList :: [Span] -> ShowS Source #
Eq Span Source # |
Instance details Defined in Hedgehog.Internal.Source Methods (==) :: Span -> Span -> Bool Source # (/=) :: Span -> Span -> Bool Source #
Ord Span Source # |
Instance details Defined in Hedgehog.Internal.Source Methods compare :: Span -> Span -> Ordering Source # (<) :: Span -> Span -> Bool Source # (<=) :: Span -> Span -> Bool Source # (>) :: Span -> Span -> Bool Source # (>=) :: Span -> Span -> Bool Source # max :: Span -> Span -> Span Source # min :: Span -> Span -> Span Source #

getCaller :: CallStack -> Maybe Span Source #

# Re-exports from GHC.Stack

data CallStack Source #

`CallStack`s 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:

1. 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`.
2. 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).
3. 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.

`CallStack`s 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

Instances details

NFData CallStack | Since: deepseq-1.4.2.0
Instance details Defined in Control.DeepSeq Methods rnf :: CallStack -> () Source #
IsList CallStack | Be aware that 'fromList . toList = id' only for unfrozen `CallStack`s, since `toList` removes frozenness information. Since: base-4.9.0.0

Instance details

Defined in GHC.Internal.IsList

Associated Types

type Item CallStack |
Instance details Defined in GHC.Internal.IsList type Item CallStack = (String, SrcLoc)

Methods

fromList :: [Item CallStack] -> CallStack Source #

fromListN :: Int -> [Item CallStack] -> CallStack Source #

toList :: CallStack -> [Item CallStack] Source #

Show CallStack | Since: base-4.9.0.0
Instance details Defined in GHC.Internal.Show Methods showsPrec :: Int -> CallStack -> ShowS Source # show :: CallStack -> String Source # showList :: [CallStack] -> ShowS Source #
type Item CallStack |
Instance details Defined in GHC.Internal.IsList type Item CallStack = (String, SrcLoc)

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 #

Return the current `CallStack`.

Does *not* include the call-site of `callStack`.

Since: base-4.9.0.0

withFrozenCallStack :: HasCallStack => (HasCallStack => a) -> a Source #

Perform some computation without adding new entries to the `CallStack`.

Since: base-4.9.0.0