packages feed

ghc-stack-profiler-core-0.5.0.0: src/GHC/Stack/Profiler/Core/Internal/CallStack.hs

{-# LANGUAGE OverloadedStrings #-}

module GHC.Stack.Profiler.Core.Internal.CallStack (
  CallStack (..),
  StackItem (..),
  SourceLocation (..),
) where

import Data.Text (Text)
import Data.Word (Word32)
import GHC.Generics
import GHC.Stack.Profiler.Core.Internal.Eventlog

-- ----------------------------------------------------------------------------
-- Decoded RTS CallStack
-- ----------------------------------------------------------------------------

-- | A decoded rts callstack that can be serialised to the EventLog.
data CallStack = MkCallStack
  { callThreadId :: !ThreadId
  , callCapabilityId :: !CapabilityId
  , callStack :: [StackItem]
  }
  deriving (Eq, Ord, Show, Generic)

data StackItem
  = IpeId !IpeId
  | UserAnnotation !String !(Maybe SourceLocation)
  deriving (Eq, Ord, Show, Generic)

-- | A Haskell source location.
data SourceLocation = MkSourceLocation
  { line :: !Word32
  , column :: !Word32
  , fileName :: !Text
  }
  deriving (Eq, Ord, Show, Generic)