Hannes Siebenhandl pushed to branch wip/fendor/stack-annotation-ty at Glasgow Haskell Compiler / GHC
Commits:
-
90df50b2
by fendor at 2026-01-21T09:52:22+01:00
10 changed files:
- libraries/ghc-experimental/src/GHC/Stack/Annotation/Experimental.hs
- libraries/ghc-experimental/tests/backtraces/T26806a.stderr
- libraries/ghc-experimental/tests/backtraces/T26806b.stderr
- libraries/ghc-internal/src/GHC/Internal/Stack/Annotation.hs
- libraries/ghc-internal/tests/stack-annotation/ann_frame001.stdout
- libraries/ghc-internal/tests/stack-annotation/ann_frame002.stdout
- libraries/ghc-internal/tests/stack-annotation/ann_frame003.stdout
- libraries/ghc-internal/tests/stack-annotation/ann_frame004.stdout
- testsuite/tests/interface-stability/ghc-experimental-exports.stdout
- testsuite/tests/interface-stability/ghc-experimental-exports.stdout-mingw32
Changes:
| ... | ... | @@ -133,20 +133,32 @@ import GHC.Internal.Stack.Annotation |
| 133 | 133 | -- Annotations
|
| 134 | 134 | -- ----------------------------------------------------------------------------
|
| 135 | 135 | |
| 136 | + |
|
| 137 | +-- | A 'String' only annotation with an optional source location.
|
|
| 136 | 138 | data StringAnnotation where
|
| 137 | - StringAnnotation :: String -> StringAnnotation
|
|
| 139 | + StringAnnotation :: !(Maybe SrcLoc) -> String -> StringAnnotation
|
|
| 138 | 140 | |
| 139 | 141 | instance StackAnnotation StringAnnotation where
|
| 140 | - displayStackAnnotation (StringAnnotation str) = str
|
|
| 142 | + displayStackAnnotationShort (StringAnnotation _srcLoc str) =
|
|
| 143 | + str
|
|
| 144 | + |
|
| 145 | + sourceLocationOfStackAnnotation (StringAnnotation srcLoc _str) =
|
|
| 146 | + srcLoc
|
|
| 141 | 147 | |
| 142 | 148 | -- | Use the 'Show' instance of a type to display as the 'StackAnnotation'.
|
| 143 | 149 | data ShowAnnotation where
|
| 144 | - ShowAnnotation :: forall a . Show a => a -> ShowAnnotation
|
|
| 150 | + ShowAnnotation :: forall a . Show a => !(Maybe SrcLoc) -> a -> ShowAnnotation
|
|
| 145 | 151 | |
| 146 | 152 | instance StackAnnotation ShowAnnotation where
|
| 147 | - displayStackAnnotation (ShowAnnotation showAnno) = show showAnno
|
|
| 153 | + displayStackAnnotationShort (ShowAnnotation _srcLoc showAnno) =
|
|
| 154 | + show showAnno
|
|
| 155 | + |
|
| 156 | + sourceLocationOfStackAnnotation (ShowAnnotation srcLoc _showAnno) =
|
|
| 157 | + srcLoc
|
|
| 148 | 158 | |
| 149 | 159 | -- | A 'CallStack' stack annotation.
|
| 160 | +--
|
|
| 161 | +-- Captures the whole 'CallStack'.
|
|
| 150 | 162 | newtype CallStackAnnotation = CallStackAnnotation CallStack
|
| 151 | 163 | |
| 152 | 164 | instance Show CallStackAnnotation where
|
| ... | ... | @@ -154,9 +166,23 @@ instance Show CallStackAnnotation where |
| 154 | 166 | |
| 155 | 167 | -- | Displays the first entry of the 'CallStack'
|
| 156 | 168 | instance StackAnnotation CallStackAnnotation where
|
| 157 | - displayStackAnnotation (CallStackAnnotation cs) = case getCallStack cs of
|
|
| 169 | + sourceLocationOfStackAnnotation (CallStackAnnotation cs) =
|
|
| 170 | + callStackHeadSrcLoc cs
|
|
| 171 | + |
|
| 172 | + displayStackAnnotationShort (CallStackAnnotation cs) =
|
|
| 173 | + callStackHeadFunctionName cs
|
|
| 174 | + |
|
| 175 | +callStackHeadSrcLoc :: CallStack -> Maybe SrcLoc
|
|
| 176 | +callStackHeadSrcLoc cs =
|
|
| 177 | + case getCallStack cs of
|
|
| 178 | + [] -> Nothing
|
|
| 179 | + (_, srcLoc):_ -> Just srcLoc
|
|
| 180 | + |
|
| 181 | +callStackHeadFunctionName :: CallStack -> String
|
|
| 182 | +callStackHeadFunctionName cs =
|
|
| 183 | + case getCallStack cs of
|
|
| 158 | 184 | [] -> "<unknown source location>"
|
| 159 | - ((fnName,srcLoc):_) -> fnName ++ ", called at " ++ prettySrcLoc srcLoc
|
|
| 185 | + (fnName, _):_ -> fnName
|
|
| 160 | 186 | |
| 161 | 187 | -- ----------------------------------------------------------------------------
|
| 162 | 188 | -- Annotate the CallStack with custom data
|
| ... | ... | @@ -172,7 +198,7 @@ instance StackAnnotation CallStackAnnotation where |
| 172 | 198 | --
|
| 173 | 199 | -- WARNING: forces the evaluation of @b@ to WHNF.
|
| 174 | 200 | {-# NOINLINE annotateStack #-}
|
| 175 | -annotateStack :: forall a b. (Typeable a, StackAnnotation a) => a -> b -> b
|
|
| 201 | +annotateStack :: forall a b. (HasCallStack, Typeable a, StackAnnotation a) => a -> b -> b
|
|
| 176 | 202 | annotateStack ann b = unsafePerformIO $
|
| 177 | 203 | annotateStackIO ann (evaluate b)
|
| 178 | 204 | |
| ... | ... | @@ -196,9 +222,9 @@ annotateCallStack b = unsafePerformIO $ withFrozenCallStack $ |
| 196 | 222 | -- information to stack traces.
|
| 197 | 223 | --
|
| 198 | 224 | -- WARNING: forces the evaluation of @b@ to WHNF.
|
| 199 | -annotateStackString :: forall b . String -> b -> b
|
|
| 225 | +annotateStackString :: forall b . HasCallStack => String -> b -> b
|
|
| 200 | 226 | annotateStackString ann =
|
| 201 | - annotateStack (StringAnnotation ann)
|
|
| 227 | + annotateStack (StringAnnotation (callStackHeadSrcLoc ?callStack) ann)
|
|
| 202 | 228 | |
| 203 | 229 | -- | @'annotateStackShow' showable b@ annotates the evaluation stack of @b@
|
| 204 | 230 | -- with the value @showable@.
|
| ... | ... | @@ -207,16 +233,16 @@ annotateStackString ann = |
| 207 | 233 | -- information to stack traces.
|
| 208 | 234 | --
|
| 209 | 235 | -- WARNING: forces the evaluation of @b@ to WHNF.
|
| 210 | -annotateStackShow :: forall a b . (Typeable a, Show a) => a -> b -> b
|
|
| 236 | +annotateStackShow :: forall a b . (HasCallStack, Typeable a, Show a) => a -> b -> b
|
|
| 211 | 237 | annotateStackShow ann =
|
| 212 | - annotateStack (ShowAnnotation ann)
|
|
| 238 | + annotateStack (ShowAnnotation (callStackHeadSrcLoc ?callStack) ann)
|
|
| 213 | 239 | |
| 214 | 240 | -- | @'annotateStackIO' showable b@ annotates the evaluation stack of @b@
|
| 215 | 241 | -- with the value @showable@.
|
| 216 | 242 | --
|
| 217 | 243 | -- When decoding the call stack, the annotation frames can be used to add more
|
| 218 | 244 | -- information to stack traces.
|
| 219 | -annotateStackIO :: forall a b . (Typeable a, StackAnnotation a) => a -> IO b -> IO b
|
|
| 245 | +annotateStackIO :: forall a b . (HasCallStack, Typeable a, StackAnnotation a) => a -> IO b -> IO b
|
|
| 220 | 246 | annotateStackIO ann (IO act) =
|
| 221 | 247 | IO $ \s -> annotateStack# (SomeStackAnnotation ann) act s
|
| 222 | 248 | {-# NOINLINE annotateStackIO #-}
|
| ... | ... | @@ -226,18 +252,18 @@ annotateStackIO ann (IO act) = |
| 226 | 252 | --
|
| 227 | 253 | -- When decoding the call stack, the annotation frames can be used to add more
|
| 228 | 254 | -- information to stack traces.
|
| 229 | -annotateStackStringIO :: forall b . String -> IO b -> IO b
|
|
| 255 | +annotateStackStringIO :: forall b . HasCallStack => String -> IO b -> IO b
|
|
| 230 | 256 | annotateStackStringIO ann =
|
| 231 | - annotateStackIO (StringAnnotation ann)
|
|
| 257 | + annotateStackIO (StringAnnotation (callStackHeadSrcLoc ?callStack) ann)
|
|
| 232 | 258 | |
| 233 | 259 | -- | @'annotateStackShowIO' msg b@ annotates the evaluation stack of @b@
|
| 234 | 260 | -- with the value @msg@.
|
| 235 | 261 | --
|
| 236 | 262 | -- When decoding the call stack, the annotation frames can be used to add more
|
| 237 | 263 | -- information to stack traces.
|
| 238 | -annotateStackShowIO :: forall a b . (Show a) => a -> IO b -> IO b
|
|
| 264 | +annotateStackShowIO :: forall a b . (HasCallStack, Show a) => a -> IO b -> IO b
|
|
| 239 | 265 | annotateStackShowIO ann =
|
| 240 | - annotateStackIO (ShowAnnotation ann)
|
|
| 266 | + annotateStackIO (ShowAnnotation (callStackHeadSrcLoc ?callStack) ann)
|
|
| 241 | 267 | |
| 242 | 268 | -- | @'annotateCallStackIO' b@ annotates the evaluation stack of @b@ with the
|
| 243 | 269 | -- current 'callstack'.
|
| ... | ... | @@ -3,8 +3,8 @@ T26806a: Uncaught exception ghc-internal:GHC.Internal.Exception.ErrorCall: |
| 3 | 3 | Backtrace Test
|
| 4 | 4 | |
| 5 | 5 | IPE backtrace:
|
| 6 | - Lovely annotation
|
|
| 7 | - [1,2,3,4]
|
|
| 6 | + Lovely annotation, called at T26806a.hs:12:7 in main:Main
|
|
| 7 | + [1,2,3,4], called at T26806a.hs:11:5 in main:Main
|
|
| 8 | 8 | annotateCallStackIO, called at T26806a.hs:10:3 in main:Main
|
| 9 | 9 | HasCallStack backtrace:
|
| 10 | 10 | throwIO, called at T26806a.hs:13:9 in main:Main
|
| ... | ... | @@ -3,8 +3,8 @@ T26806b: Uncaught exception ghc-internal:GHC.Internal.Exception.ErrorCall: |
| 3 | 3 | Backtrace Test: 125000000
|
| 4 | 4 | |
| 5 | 5 | IPE backtrace:
|
| 6 | - Lovely annotation
|
|
| 7 | - [1,2,3,4]
|
|
| 6 | + Lovely annotation, called at T26806b.hs:16:7 in main:Main
|
|
| 7 | + [1,2,3,4], called at T26806b.hs:15:5 in main:Main
|
|
| 8 | 8 | annotateCallStack, called at T26806b.hs:14:3 in main:Main
|
| 9 | 9 | HasCallStack backtrace:
|
| 10 | 10 | collectExceptionAnnotation, called at libraries/ghc-internal/src/GHC/Internal/Exception.hs:170:37 in ghc-internal:GHC.Internal.Exception
|
| ... | ... | @@ -4,6 +4,7 @@ module GHC.Internal.Stack.Annotation where |
| 4 | 4 | |
| 5 | 5 | import GHC.Internal.Base
|
| 6 | 6 | import GHC.Internal.Data.Typeable
|
| 7 | +import GHC.Internal.Stack (SrcLoc, prettySrcLoc)
|
|
| 7 | 8 | |
| 8 | 9 | -- ----------------------------------------------------------------------------
|
| 9 | 10 | -- StackAnnotation
|
| ... | ... | @@ -13,8 +14,36 @@ import GHC.Internal.Data.Typeable |
| 13 | 14 | -- as the payload of 'AnnFrame' stack frames.
|
| 14 | 15 | --
|
| 15 | 16 | class StackAnnotation a where
|
| 17 | + -- | Display a human readable string for the 'StackAnnotation'.
|
|
| 18 | + --
|
|
| 19 | + -- This is supposed to be the long version of 'displayStackAnnotationShort'
|
|
| 20 | + -- and may contain a source location.
|
|
| 21 | + --
|
|
| 22 | + -- If not provided, 'displayStackAnnotation' is derived from 'sourceLocationOfStackAnnotation'
|
|
| 23 | + -- and 'displayStackAnnotationShort'.
|
|
| 16 | 24 | displayStackAnnotation :: a -> String
|
| 17 | 25 | |
| 26 | + -- | Get the 'SrcLoc' of the given 'StackAnnotation'.
|
|
| 27 | + --
|
|
| 28 | + -- This is optional, 'SrcLoc' are not strictly required for 'StackAnnotation', but
|
|
| 29 | + -- it is still heavily encouarged to provide a 'SrcLoc' for better IPE backtraces.
|
|
| 30 | + sourceLocationOfStackAnnotation :: a -> Maybe SrcLoc
|
|
| 31 | + |
|
| 32 | + -- | The description of the StackAnnotation without any metadata such as source locations.
|
|
| 33 | + --
|
|
| 34 | + -- Pefer implementing 'displayStackAnnotationShort' over 'displayStackAnnotation'.
|
|
| 35 | + displayStackAnnotationShort :: a -> String
|
|
| 36 | + |
|
| 37 | + {-# MINIMAL displayStackAnnotation | displayStackAnnotationShort #-}
|
|
| 38 | + |
|
| 39 | + displayStackAnnotation ann =
|
|
| 40 | + displayStackAnnotationShort ann
|
|
| 41 | + ++ case sourceLocationOfStackAnnotation ann of
|
|
| 42 | + Nothing -> ""
|
|
| 43 | + Just srcLoc -> ", called at " ++ prettySrcLoc srcLoc
|
|
| 44 | + sourceLocationOfStackAnnotation _ann = Nothing
|
|
| 45 | + displayStackAnnotationShort = displayStackAnnotation
|
|
| 46 | + |
|
| 18 | 47 | -- ----------------------------------------------------------------------------
|
| 19 | 48 | -- Annotations
|
| 20 | 49 | -- ----------------------------------------------------------------------------
|
| ... | ... | @@ -29,3 +58,5 @@ data SomeStackAnnotation where |
| 29 | 58 | |
| 30 | 59 | instance StackAnnotation SomeStackAnnotation where
|
| 31 | 60 | displayStackAnnotation (SomeStackAnnotation a) = displayStackAnnotation a
|
| 61 | + sourceLocationOfStackAnnotation (SomeStackAnnotation a) = sourceLocationOfStackAnnotation a
|
|
| 62 | + displayStackAnnotationShort (SomeStackAnnotation a) = displayStackAnnotationShort a |
| 1 | 1 | Stack annotations:
|
| 2 | -- (2,3)
|
|
| 2 | +- (2,3), called at ann_frame001.hs:5:13 in main:Main
|
|
| 3 | 3 | 47
|
| 4 | 4 | Stack annotations:
|
| 5 | -- "bar"
|
|
| 6 | -- "foo"
|
|
| 7 | -- "tailCallEx"
|
|
| 5 | +- "bar", called at ann_frame001.hs:23:9 in main:Main
|
|
| 6 | +- "foo", called at ann_frame001.hs:21:11 in main:Main
|
|
| 7 | +- "tailCallEx", called at ann_frame001.hs:17:18 in main:Main
|
|
| 8 | 8 | Stack annotations:
|
| 9 | -- "bar"
|
|
| 10 | -- "foo"
|
|
| 11 | -- "tailCallEx"
|
|
| 9 | +- "bar", called at ann_frame001.hs:23:9 in main:Main
|
|
| 10 | +- "foo", called at ann_frame001.hs:21:11 in main:Main
|
|
| 11 | +- "tailCallEx", called at ann_frame001.hs:17:18 in main:Main
|
|
| 12 | 12 | 40 |
| ... | ... | @@ -7,5 +7,5 @@ Finish some work |
| 7 | 7 | Some more work in bar
|
| 8 | 8 | 17711
|
| 9 | 9 | Stack annotations:
|
| 10 | -- bar
|
|
| 10 | +- bar, called at ann_frame002.hs:23:29 in main:Main
|
|
| 11 | 11 | - annotateCallStackIO, called at ann_frame002.hs:23:7 in main:Main |
| 1 | 1 | 47
|
| 2 | 2 | Stack annotations:
|
| 3 | -- "bar"
|
|
| 4 | -- "foo"
|
|
| 5 | -- "tailCallEx"
|
|
| 3 | +- "bar", called at ann_frame003.hs:25:9 in main:Main
|
|
| 4 | +- "foo", called at ann_frame003.hs:21:11 in main:Main
|
|
| 5 | +- "tailCallEx", called at ann_frame003.hs:16:18 in main:Main
|
|
| 6 | 6 | 40 |
| ... | ... | @@ -13,5 +13,5 @@ Stack annotations: |
| 13 | 13 | - annotateCallStack, called at ann_frame004.hs:21:17 in main:Main
|
| 14 | 14 | - annotateCallStack, called at ann_frame004.hs:21:17 in main:Main
|
| 15 | 15 | - annotateCallStack, called at ann_frame004.hs:13:10 in main:Main
|
| 16 | -- bar
|
|
| 16 | +- bar, called at ann_frame004.hs:12:29 in main:Main
|
|
| 17 | 17 | - annotateCallStackIO, called at ann_frame004.hs:12:7 in main:Main |
| ... | ... | @@ -6482,25 +6482,27 @@ module GHC.Stack.Annotation.Experimental where |
| 6482 | 6482 | newtype CallStackAnnotation = CallStackAnnotation GHC.Internal.Stack.Types.CallStack
|
| 6483 | 6483 | type ShowAnnotation :: *
|
| 6484 | 6484 | data ShowAnnotation where
|
| 6485 | - ShowAnnotation :: forall a. GHC.Internal.Show.Show a => a -> ShowAnnotation
|
|
| 6485 | + ShowAnnotation :: forall a. GHC.Internal.Show.Show a => !(GHC.Internal.Maybe.Maybe GHC.Internal.Stack.Types.SrcLoc) -> a -> ShowAnnotation
|
|
| 6486 | 6486 | type SomeStackAnnotation :: *
|
| 6487 | 6487 | data SomeStackAnnotation where
|
| 6488 | 6488 | SomeStackAnnotation :: forall a. (ghc-internal-9.1500.0:GHC.Internal.Data.Typeable.Internal.Typeable a, StackAnnotation a) => a -> SomeStackAnnotation
|
| 6489 | 6489 | type StackAnnotation :: * -> Constraint
|
| 6490 | 6490 | class StackAnnotation a where
|
| 6491 | 6491 | displayStackAnnotation :: a -> GHC.Internal.Base.String
|
| 6492 | - {-# MINIMAL displayStackAnnotation #-}
|
|
| 6492 | + sourceLocationOfStackAnnotation :: a -> GHC.Internal.Maybe.Maybe GHC.Internal.Stack.Types.SrcLoc
|
|
| 6493 | + displayStackAnnotationShort :: a -> GHC.Internal.Base.String
|
|
| 6494 | + {-# MINIMAL displayStackAnnotation | displayStackAnnotationShort #-}
|
|
| 6493 | 6495 | type StringAnnotation :: *
|
| 6494 | 6496 | data StringAnnotation where
|
| 6495 | - StringAnnotation :: GHC.Internal.Base.String -> StringAnnotation
|
|
| 6497 | + StringAnnotation :: !(GHC.Internal.Maybe.Maybe GHC.Internal.Stack.Types.SrcLoc) -> GHC.Internal.Base.String -> StringAnnotation
|
|
| 6496 | 6498 | annotateCallStack :: forall b. GHC.Internal.Stack.Types.HasCallStack => b -> b
|
| 6497 | 6499 | annotateCallStackIO :: forall a. GHC.Internal.Stack.Types.HasCallStack => GHC.Internal.Types.IO a -> GHC.Internal.Types.IO a
|
| 6498 | - annotateStack :: forall a b. (ghc-internal-9.1500.0:GHC.Internal.Data.Typeable.Internal.Typeable a, StackAnnotation a) => a -> b -> b
|
|
| 6499 | - annotateStackIO :: forall a b. (ghc-internal-9.1500.0:GHC.Internal.Data.Typeable.Internal.Typeable a, StackAnnotation a) => a -> GHC.Internal.Types.IO b -> GHC.Internal.Types.IO b
|
|
| 6500 | - annotateStackShow :: forall a b. (ghc-internal-9.1500.0:GHC.Internal.Data.Typeable.Internal.Typeable a, GHC.Internal.Show.Show a) => a -> b -> b
|
|
| 6501 | - annotateStackShowIO :: forall a b. GHC.Internal.Show.Show a => a -> GHC.Internal.Types.IO b -> GHC.Internal.Types.IO b
|
|
| 6502 | - annotateStackString :: forall b. GHC.Internal.Base.String -> b -> b
|
|
| 6503 | - annotateStackStringIO :: forall b. GHC.Internal.Base.String -> GHC.Internal.Types.IO b -> GHC.Internal.Types.IO b
|
|
| 6500 | + annotateStack :: forall a b. (GHC.Internal.Stack.Types.HasCallStack, ghc-internal-9.1500.0:GHC.Internal.Data.Typeable.Internal.Typeable a, StackAnnotation a) => a -> b -> b
|
|
| 6501 | + annotateStackIO :: forall a b. (GHC.Internal.Stack.Types.HasCallStack, ghc-internal-9.1500.0:GHC.Internal.Data.Typeable.Internal.Typeable a, StackAnnotation a) => a -> GHC.Internal.Types.IO b -> GHC.Internal.Types.IO b
|
|
| 6502 | + annotateStackShow :: forall a b. (GHC.Internal.Stack.Types.HasCallStack, ghc-internal-9.1500.0:GHC.Internal.Data.Typeable.Internal.Typeable a, GHC.Internal.Show.Show a) => a -> b -> b
|
|
| 6503 | + annotateStackShowIO :: forall a b. (GHC.Internal.Stack.Types.HasCallStack, GHC.Internal.Show.Show a) => a -> GHC.Internal.Types.IO b -> GHC.Internal.Types.IO b
|
|
| 6504 | + annotateStackString :: forall b. GHC.Internal.Stack.Types.HasCallStack => GHC.Internal.Base.String -> b -> b
|
|
| 6505 | + annotateStackStringIO :: forall b. GHC.Internal.Stack.Types.HasCallStack => GHC.Internal.Base.String -> GHC.Internal.Types.IO b -> GHC.Internal.Types.IO b
|
|
| 6504 | 6506 | |
| 6505 | 6507 | module GHC.Stats.Experimental where
|
| 6506 | 6508 | -- Safety: Safe
|
| ... | ... | @@ -6485,25 +6485,27 @@ module GHC.Stack.Annotation.Experimental where |
| 6485 | 6485 | newtype CallStackAnnotation = CallStackAnnotation GHC.Internal.Stack.Types.CallStack
|
| 6486 | 6486 | type ShowAnnotation :: *
|
| 6487 | 6487 | data ShowAnnotation where
|
| 6488 | - ShowAnnotation :: forall a. GHC.Internal.Show.Show a => a -> ShowAnnotation
|
|
| 6488 | + ShowAnnotation :: forall a. GHC.Internal.Show.Show a => !(GHC.Internal.Maybe.Maybe GHC.Internal.Stack.Types.SrcLoc) -> a -> ShowAnnotation
|
|
| 6489 | 6489 | type SomeStackAnnotation :: *
|
| 6490 | 6490 | data SomeStackAnnotation where
|
| 6491 | 6491 | SomeStackAnnotation :: forall a. (ghc-internal-9.1500.0:GHC.Internal.Data.Typeable.Internal.Typeable a, StackAnnotation a) => a -> SomeStackAnnotation
|
| 6492 | 6492 | type StackAnnotation :: * -> Constraint
|
| 6493 | 6493 | class StackAnnotation a where
|
| 6494 | 6494 | displayStackAnnotation :: a -> GHC.Internal.Base.String
|
| 6495 | - {-# MINIMAL displayStackAnnotation #-}
|
|
| 6495 | + sourceLocationOfStackAnnotation :: a -> GHC.Internal.Maybe.Maybe GHC.Internal.Stack.Types.SrcLoc
|
|
| 6496 | + displayStackAnnotationShort :: a -> GHC.Internal.Base.String
|
|
| 6497 | + {-# MINIMAL displayStackAnnotation | displayStackAnnotationShort #-}
|
|
| 6496 | 6498 | type StringAnnotation :: *
|
| 6497 | 6499 | data StringAnnotation where
|
| 6498 | - StringAnnotation :: GHC.Internal.Base.String -> StringAnnotation
|
|
| 6500 | + StringAnnotation :: !(GHC.Internal.Maybe.Maybe GHC.Internal.Stack.Types.SrcLoc) -> GHC.Internal.Base.String -> StringAnnotation
|
|
| 6499 | 6501 | annotateCallStack :: forall b. GHC.Internal.Stack.Types.HasCallStack => b -> b
|
| 6500 | 6502 | annotateCallStackIO :: forall a. GHC.Internal.Stack.Types.HasCallStack => GHC.Internal.Types.IO a -> GHC.Internal.Types.IO a
|
| 6501 | - annotateStack :: forall a b. (ghc-internal-9.1500.0:GHC.Internal.Data.Typeable.Internal.Typeable a, StackAnnotation a) => a -> b -> b
|
|
| 6502 | - annotateStackIO :: forall a b. (ghc-internal-9.1500.0:GHC.Internal.Data.Typeable.Internal.Typeable a, StackAnnotation a) => a -> GHC.Internal.Types.IO b -> GHC.Internal.Types.IO b
|
|
| 6503 | - annotateStackShow :: forall a b. (ghc-internal-9.1500.0:GHC.Internal.Data.Typeable.Internal.Typeable a, GHC.Internal.Show.Show a) => a -> b -> b
|
|
| 6504 | - annotateStackShowIO :: forall a b. GHC.Internal.Show.Show a => a -> GHC.Internal.Types.IO b -> GHC.Internal.Types.IO b
|
|
| 6505 | - annotateStackString :: forall b. GHC.Internal.Base.String -> b -> b
|
|
| 6506 | - annotateStackStringIO :: forall b. GHC.Internal.Base.String -> GHC.Internal.Types.IO b -> GHC.Internal.Types.IO b
|
|
| 6503 | + annotateStack :: forall a b. (GHC.Internal.Stack.Types.HasCallStack, ghc-internal-9.1500.0:GHC.Internal.Data.Typeable.Internal.Typeable a, StackAnnotation a) => a -> b -> b
|
|
| 6504 | + annotateStackIO :: forall a b. (GHC.Internal.Stack.Types.HasCallStack, ghc-internal-9.1500.0:GHC.Internal.Data.Typeable.Internal.Typeable a, StackAnnotation a) => a -> GHC.Internal.Types.IO b -> GHC.Internal.Types.IO b
|
|
| 6505 | + annotateStackShow :: forall a b. (GHC.Internal.Stack.Types.HasCallStack, ghc-internal-9.1500.0:GHC.Internal.Data.Typeable.Internal.Typeable a, GHC.Internal.Show.Show a) => a -> b -> b
|
|
| 6506 | + annotateStackShowIO :: forall a b. (GHC.Internal.Stack.Types.HasCallStack, GHC.Internal.Show.Show a) => a -> GHC.Internal.Types.IO b -> GHC.Internal.Types.IO b
|
|
| 6507 | + annotateStackString :: forall b. GHC.Internal.Stack.Types.HasCallStack => GHC.Internal.Base.String -> b -> b
|
|
| 6508 | + annotateStackStringIO :: forall b. GHC.Internal.Stack.Types.HasCallStack => GHC.Internal.Base.String -> GHC.Internal.Types.IO b -> GHC.Internal.Types.IO b
|
|
| 6507 | 6509 | |
| 6508 | 6510 | module GHC.Stats.Experimental where
|
| 6509 | 6511 | -- Safety: Safe
|