Safe Haskell | None |
---|---|
Language | Haskell2010 |
Synopsis
- type Closure = GenClosure Box
- data GenClosure b
- = ConstrClosure { }
- | FunClosure {
- info :: !StgInfoTable
- ptrArgs :: ![b]
- dataArgs :: ![Word]
- | ThunkClosure {
- info :: !StgInfoTable
- ptrArgs :: ![b]
- dataArgs :: ![Word]
- | SelectorClosure {
- info :: !StgInfoTable
- selectee :: !b
- | PAPClosure { }
- | APClosure { }
- | APStackClosure {
- info :: !StgInfoTable
- fun :: !b
- payload :: ![b]
- | IndClosure {
- info :: !StgInfoTable
- indirectee :: !b
- | BCOClosure { }
- | BlackholeClosure {
- info :: !StgInfoTable
- indirectee :: !b
- | ArrWordsClosure { }
- | MutArrClosure {
- info :: !StgInfoTable
- mccPtrs :: !Word
- mccSize :: !Word
- mccPayload :: ![b]
- | SmallMutArrClosure {
- info :: !StgInfoTable
- mccPtrs :: !Word
- mccPayload :: ![b]
- | MVarClosure {
- info :: !StgInfoTable
- queueHead :: !b
- queueTail :: !b
- value :: !b
- | IOPortClosure {
- info :: !StgInfoTable
- queueHead :: !b
- queueTail :: !b
- value :: !b
- | MutVarClosure {
- info :: !StgInfoTable
- var :: !b
- | BlockingQueueClosure { }
- | WeakClosure {
- info :: !StgInfoTable
- cfinalizers :: !b
- key :: !b
- value :: !b
- finalizer :: !b
- weakLink :: !(Maybe b)
- | TSOClosure {
- info :: !StgInfoTable
- link :: !b
- global_link :: !b
- tsoStack :: !b
- trec :: !b
- blocked_exceptions :: !b
- bq :: !b
- thread_label :: !(Maybe b)
- what_next :: !WhatNext
- why_blocked :: !WhyBlocked
- flags :: ![TsoFlags]
- threadId :: !Word64
- saved_errno :: !Word32
- tso_dirty :: !Word32
- alloc_limit :: !Int64
- tot_stack_size :: !Word32
- prof :: !(Maybe StgTSOProfInfo)
- | StackClosure {
- info :: !StgInfoTable
- stack_size :: !Word32
- stack_dirty :: !Word8
- stack_marking :: !Word8
- | IntClosure { }
- | WordClosure { }
- | Int64Closure { }
- | Word64Closure { }
- | AddrClosure { }
- | FloatClosure { }
- | DoubleClosure { }
- | OtherClosure {
- info :: !StgInfoTable
- hvalues :: ![b]
- rawWords :: ![Word]
- | UnsupportedClosure {
- info :: !StgInfoTable
- | UnknownTypeWordSizedPrimitive { }
- data PrimType
- data WhatNext
- data WhyBlocked
- data TsoFlags
- allClosures :: GenClosure b -> [b]
- closureSize :: Box -> Int
- type StgStackClosure = GenStgStackClosure Box
- data GenStgStackClosure b = GenStgStackClosure {
- ssc_info :: !StgInfoTable
- ssc_stack_size :: !Word32
- ssc_stack :: ![GenStackFrame b]
- type StackFrame = GenStackFrame Box
- data GenStackFrame b
- = UpdateFrame {
- info_tbl :: !StgInfoTable
- updatee :: !b
- | CatchFrame {
- info_tbl :: !StgInfoTable
- handler :: !b
- | CatchStmFrame {
- info_tbl :: !StgInfoTable
- catchFrameCode :: !b
- handler :: !b
- | CatchRetryFrame {
- info_tbl :: !StgInfoTable
- running_alt_code :: !Word
- first_code :: !b
- alt_code :: !b
- | AtomicallyFrame {
- info_tbl :: !StgInfoTable
- atomicallyFrameCode :: !b
- result :: !b
- | UnderflowFrame {
- info_tbl :: !StgInfoTable
- nextChunk :: !(GenStgStackClosure b)
- | StopFrame {
- info_tbl :: !StgInfoTable
- | RetSmall {
- info_tbl :: !StgInfoTable
- stack_payload :: ![GenStackField b]
- | RetBig {
- info_tbl :: !StgInfoTable
- stack_payload :: ![GenStackField b]
- | RetFun {
- info_tbl :: !StgInfoTable
- retFunSize :: !Word
- retFunFun :: !b
- retFunPayload :: ![GenStackField b]
- | RetBCO {
- info_tbl :: !StgInfoTable
- bco :: !b
- bcoArgs :: ![GenStackField b]
- = UpdateFrame {
- type StackField = GenStackField Box
- data GenStackField b
- data Box = Box (Any :: Type)
- areBoxesEqual :: Box -> Box -> IO Bool
- asBox :: a -> Box
Closures
type Closure = GenClosure Box Source #
data GenClosure b Source #
This is the representation of a Haskell value on the heap. It reflects https://gitlab.haskell.org/ghc/ghc/blob/master/rts/include/rts/storage/Closures.h
The data type is parametrized by b
: the type to store references in.
Usually this is a Box
with the type synonym Closure
.
All Heap objects have the same basic layout. A header containing a pointer to
the info table and a payload with various fields. The info
field below
always refers to the info table pointed to by the header. The remaining
fields are the payload.
See https://gitlab.haskell.org/ghc/ghc/wikis/commentary/rts/storage/heap-objects for more information.
ConstrClosure | A data constructor |
FunClosure | A function |
| |
ThunkClosure | A thunk, an expression not obviously in head normal form |
| |
SelectorClosure | A thunk which performs a simple selection operation |
| |
PAPClosure | An unsaturated function application |
| |
APClosure | A function application |
| |
APStackClosure | A suspended thunk evaluation |
| |
IndClosure | A pointer to another closure, introduced when a thunk is updated to point at its value |
| |
BCOClosure | A byte-code object (BCO) which can be interpreted by GHC's byte-code interpreter (e.g. as used by GHCi) |
| |
BlackholeClosure | A thunk under evaluation by another thread |
| |
ArrWordsClosure | A |
MutArrClosure | A |
| |
SmallMutArrClosure | A Since: ghc-heap-8.10.1 |
| |
MVarClosure | An |
| |
IOPortClosure | An |
| |
MutVarClosure | A |
| |
BlockingQueueClosure | An STM blocking queue. |
WeakClosure | |
| |
TSOClosure | Representation of StgTSO: A Thread State Object. The values for
|
| |
StackClosure | Representation of StgStack: The 'tsoStack ' of a |
| |
IntClosure | Primitive Int |
WordClosure | Primitive Word |
Int64Closure | Primitive Int64 |
Word64Closure | Primitive Word64 |
AddrClosure | Primitive Addr |
FloatClosure | Primitive Float |
DoubleClosure | Primitive Double |
OtherClosure | Another kind of closure |
| |
UnsupportedClosure | |
| |
UnknownTypeWordSizedPrimitive | A primitive word from a bitmap encoded stack frame payload The type itself cannot be restored (i.e. it might represent a Word8# or an Int#). |
Instances
Instances
Generic PrimType Source # | |||||
Defined in GHC.Exts.Heap.Closures
| |||||
Show PrimType Source # | |||||
Eq PrimType Source # | |||||
Ord PrimType Source # | |||||
Defined in GHC.Exts.Heap.Closures | |||||
type Rep PrimType Source # | |||||
Defined in GHC.Exts.Heap.Closures type Rep PrimType = D1 ('MetaData "PrimType" "GHC.Exts.Heap.Closures" "ghc-heap-9.10.0.20240313-2d27" 'False) ((C1 ('MetaCons "PInt" 'PrefixI 'False) (U1 :: Type -> Type) :+: (C1 ('MetaCons "PWord" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "PInt64" 'PrefixI 'False) (U1 :: Type -> Type))) :+: ((C1 ('MetaCons "PWord64" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "PAddr" 'PrefixI 'False) (U1 :: Type -> Type)) :+: (C1 ('MetaCons "PFloat" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "PDouble" 'PrefixI 'False) (U1 :: Type -> Type)))) |
ThreadRunGHC | |
ThreadInterpret | |
ThreadKilled | |
ThreadComplete | |
WhatNextUnknownValue Word16 | Please report this as a bug |
Instances
Generic WhatNext Source # | |||||
Defined in GHC.Exts.Heap.Closures
| |||||
Show WhatNext Source # | |||||
Eq WhatNext Source # | |||||
Ord WhatNext Source # | |||||
Defined in GHC.Exts.Heap.Closures | |||||
type Rep WhatNext Source # | |||||
Defined in GHC.Exts.Heap.Closures type Rep WhatNext = D1 ('MetaData "WhatNext" "GHC.Exts.Heap.Closures" "ghc-heap-9.10.0.20240313-2d27" 'False) ((C1 ('MetaCons "ThreadRunGHC" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "ThreadInterpret" 'PrefixI 'False) (U1 :: Type -> Type)) :+: (C1 ('MetaCons "ThreadKilled" 'PrefixI 'False) (U1 :: Type -> Type) :+: (C1 ('MetaCons "ThreadComplete" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "WhatNextUnknownValue" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Word16))))) |
data WhyBlocked Source #
NotBlocked | |
BlockedOnMVar | |
BlockedOnMVarRead | |
BlockedOnBlackHole | |
BlockedOnRead | |
BlockedOnWrite | |
BlockedOnDelay | |
BlockedOnSTM | |
BlockedOnDoProc | |
BlockedOnCCall | |
BlockedOnCCall_Interruptible | |
BlockedOnMsgThrowTo | |
ThreadMigrating | |
WhyBlockedUnknownValue Word16 | Please report this as a bug |
Instances
Generic WhyBlocked Source # | |||||
Defined in GHC.Exts.Heap.Closures
from :: WhyBlocked -> Rep WhyBlocked x Source # to :: Rep WhyBlocked x -> WhyBlocked Source # | |||||
Show WhyBlocked Source # | |||||
Defined in GHC.Exts.Heap.Closures | |||||
Eq WhyBlocked Source # | |||||
Defined in GHC.Exts.Heap.Closures (==) :: WhyBlocked -> WhyBlocked -> Bool Source # (/=) :: WhyBlocked -> WhyBlocked -> Bool Source # | |||||
Ord WhyBlocked Source # | |||||
Defined in GHC.Exts.Heap.Closures compare :: WhyBlocked -> WhyBlocked -> Ordering Source # (<) :: WhyBlocked -> WhyBlocked -> Bool Source # (<=) :: WhyBlocked -> WhyBlocked -> Bool Source # (>) :: WhyBlocked -> WhyBlocked -> Bool Source # (>=) :: WhyBlocked -> WhyBlocked -> Bool Source # max :: WhyBlocked -> WhyBlocked -> WhyBlocked Source # min :: WhyBlocked -> WhyBlocked -> WhyBlocked Source # | |||||
type Rep WhyBlocked Source # | |||||
Defined in GHC.Exts.Heap.Closures type Rep WhyBlocked = D1 ('MetaData "WhyBlocked" "GHC.Exts.Heap.Closures" "ghc-heap-9.10.0.20240313-2d27" 'False) (((C1 ('MetaCons "NotBlocked" 'PrefixI 'False) (U1 :: Type -> Type) :+: (C1 ('MetaCons "BlockedOnMVar" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "BlockedOnMVarRead" 'PrefixI 'False) (U1 :: Type -> Type))) :+: ((C1 ('MetaCons "BlockedOnBlackHole" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "BlockedOnRead" 'PrefixI 'False) (U1 :: Type -> Type)) :+: (C1 ('MetaCons "BlockedOnWrite" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "BlockedOnDelay" 'PrefixI 'False) (U1 :: Type -> Type)))) :+: ((C1 ('MetaCons "BlockedOnSTM" 'PrefixI 'False) (U1 :: Type -> Type) :+: (C1 ('MetaCons "BlockedOnDoProc" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "BlockedOnCCall" 'PrefixI 'False) (U1 :: Type -> Type))) :+: ((C1 ('MetaCons "BlockedOnCCall_Interruptible" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "BlockedOnMsgThrowTo" 'PrefixI 'False) (U1 :: Type -> Type)) :+: (C1 ('MetaCons "ThreadMigrating" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "WhyBlockedUnknownValue" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Word16)))))) |
TsoLocked | |
TsoBlockx | |
TsoInterruptible | |
TsoStoppedOnBreakpoint | |
TsoMarked | |
TsoSqueezed | |
TsoAllocLimit | |
TsoFlagsUnknownValue Word32 | Please report this as a bug |
Instances
Generic TsoFlags Source # | |||||
Defined in GHC.Exts.Heap.Closures
| |||||
Show TsoFlags Source # | |||||
Eq TsoFlags Source # | |||||
Ord TsoFlags Source # | |||||
Defined in GHC.Exts.Heap.Closures | |||||
type Rep TsoFlags Source # | |||||
Defined in GHC.Exts.Heap.Closures type Rep TsoFlags = D1 ('MetaData "TsoFlags" "GHC.Exts.Heap.Closures" "ghc-heap-9.10.0.20240313-2d27" 'False) (((C1 ('MetaCons "TsoLocked" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "TsoBlockx" 'PrefixI 'False) (U1 :: Type -> Type)) :+: (C1 ('MetaCons "TsoInterruptible" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "TsoStoppedOnBreakpoint" 'PrefixI 'False) (U1 :: Type -> Type))) :+: ((C1 ('MetaCons "TsoMarked" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "TsoSqueezed" 'PrefixI 'False) (U1 :: Type -> Type)) :+: (C1 ('MetaCons "TsoAllocLimit" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "TsoFlagsUnknownValue" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Word32))))) |
allClosures :: GenClosure b -> [b] Source #
For generic code, this function returns all referenced closures.
closureSize :: Box -> Int Source #
Get the size of the top-level closure in words. Includes header and payload. Does not follow pointers.
Since: ghc-heap-8.10.1
Stack
type StgStackClosure = GenStgStackClosure Box Source #
data GenStgStackClosure b Source #
A decoded StgStack
with StackFrame
s
Stack related data structures (GenStgStackClosure
, GenStackField
,
GenStackFrame
) are defined separately from GenClosure
as their related
functions are very different. Though, both are closures in the sense of RTS
structures, their decoding logic differs: While it's safe to keep a reference
to a heap closure, the garbage collector does not update references to stack
located closures.
Additionally, stack frames don't appear outside of the stack. Thus, keeping
GenStackFrame
and GenClosure
separated, makes these types more precise
(in the sense what values to expect.)
GenStgStackClosure | |
|
Instances
Functor GenStgStackClosure Source # | |||||
Defined in GHC.Exts.Heap.Closures fmap :: (a -> b) -> GenStgStackClosure a -> GenStgStackClosure b Source # (<$) :: a -> GenStgStackClosure b -> GenStgStackClosure a Source # | |||||
Foldable GenStgStackClosure Source # | |||||
Defined in GHC.Exts.Heap.Closures fold :: Monoid m => GenStgStackClosure m -> m Source # foldMap :: Monoid m => (a -> m) -> GenStgStackClosure a -> m Source # foldMap' :: Monoid m => (a -> m) -> GenStgStackClosure a -> m Source # foldr :: (a -> b -> b) -> b -> GenStgStackClosure a -> b Source # foldr' :: (a -> b -> b) -> b -> GenStgStackClosure a -> b Source # foldl :: (b -> a -> b) -> b -> GenStgStackClosure a -> b Source # foldl' :: (b -> a -> b) -> b -> GenStgStackClosure a -> b Source # foldr1 :: (a -> a -> a) -> GenStgStackClosure a -> a Source # foldl1 :: (a -> a -> a) -> GenStgStackClosure a -> a Source # toList :: GenStgStackClosure a -> [a] Source # null :: GenStgStackClosure a -> Bool Source # length :: GenStgStackClosure a -> Int Source # elem :: Eq a => a -> GenStgStackClosure a -> Bool Source # maximum :: Ord a => GenStgStackClosure a -> a Source # minimum :: Ord a => GenStgStackClosure a -> a Source # sum :: Num a => GenStgStackClosure a -> a Source # product :: Num a => GenStgStackClosure a -> a Source # | |||||
Traversable GenStgStackClosure Source # | |||||
Defined in GHC.Exts.Heap.Closures traverse :: Applicative f => (a -> f b) -> GenStgStackClosure a -> f (GenStgStackClosure b) Source # sequenceA :: Applicative f => GenStgStackClosure (f a) -> f (GenStgStackClosure a) Source # mapM :: Monad m => (a -> m b) -> GenStgStackClosure a -> m (GenStgStackClosure b) Source # sequence :: Monad m => GenStgStackClosure (m a) -> m (GenStgStackClosure a) Source # | |||||
Generic (GenStgStackClosure b) Source # | |||||
Defined in GHC.Exts.Heap.Closures
from :: GenStgStackClosure b -> Rep (GenStgStackClosure b) x Source # to :: Rep (GenStgStackClosure b) x -> GenStgStackClosure b Source # | |||||
Show b => Show (GenStgStackClosure b) Source # | |||||
Defined in GHC.Exts.Heap.Closures | |||||
type Rep (GenStgStackClosure b) Source # | |||||
Defined in GHC.Exts.Heap.Closures type Rep (GenStgStackClosure b) = D1 ('MetaData "GenStgStackClosure" "GHC.Exts.Heap.Closures" "ghc-heap-9.10.0.20240313-2d27" 'False) (C1 ('MetaCons "GenStgStackClosure" 'PrefixI 'True) (S1 ('MetaSel ('Just "ssc_info") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 StgInfoTable) :*: (S1 ('MetaSel ('Just "ssc_stack_size") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Word32) :*: S1 ('MetaSel ('Just "ssc_stack") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 [GenStackFrame b])))) |
type StackFrame = GenStackFrame Box Source #
data GenStackFrame b Source #
A single stack frame
UpdateFrame | |
| |
CatchFrame | |
| |
CatchStmFrame | |
| |
CatchRetryFrame | |
| |
AtomicallyFrame | |
| |
UnderflowFrame | |
| |
StopFrame | |
| |
RetSmall | |
| |
RetBig | |
| |
RetFun | |
| |
RetBCO | |
|
Instances
Functor GenStackFrame Source # | |||||
Defined in GHC.Exts.Heap.Closures fmap :: (a -> b) -> GenStackFrame a -> GenStackFrame b Source # (<$) :: a -> GenStackFrame b -> GenStackFrame a Source # | |||||
Foldable GenStackFrame Source # | |||||
Defined in GHC.Exts.Heap.Closures fold :: Monoid m => GenStackFrame m -> m Source # foldMap :: Monoid m => (a -> m) -> GenStackFrame a -> m Source # foldMap' :: Monoid m => (a -> m) -> GenStackFrame a -> m Source # foldr :: (a -> b -> b) -> b -> GenStackFrame a -> b Source # foldr' :: (a -> b -> b) -> b -> GenStackFrame a -> b Source # foldl :: (b -> a -> b) -> b -> GenStackFrame a -> b Source # foldl' :: (b -> a -> b) -> b -> GenStackFrame a -> b Source # foldr1 :: (a -> a -> a) -> GenStackFrame a -> a Source # foldl1 :: (a -> a -> a) -> GenStackFrame a -> a Source # toList :: GenStackFrame a -> [a] Source # null :: GenStackFrame a -> Bool Source # length :: GenStackFrame a -> Int Source # elem :: Eq a => a -> GenStackFrame a -> Bool Source # maximum :: Ord a => GenStackFrame a -> a Source # minimum :: Ord a => GenStackFrame a -> a Source # sum :: Num a => GenStackFrame a -> a Source # product :: Num a => GenStackFrame a -> a Source # | |||||
Traversable GenStackFrame Source # | |||||
Defined in GHC.Exts.Heap.Closures traverse :: Applicative f => (a -> f b) -> GenStackFrame a -> f (GenStackFrame b) Source # sequenceA :: Applicative f => GenStackFrame (f a) -> f (GenStackFrame a) Source # mapM :: Monad m => (a -> m b) -> GenStackFrame a -> m (GenStackFrame b) Source # sequence :: Monad m => GenStackFrame (m a) -> m (GenStackFrame a) Source # | |||||
Generic (GenStackFrame b) Source # | |||||
Defined in GHC.Exts.Heap.Closures
from :: GenStackFrame b -> Rep (GenStackFrame b) x Source # to :: Rep (GenStackFrame b) x -> GenStackFrame b Source # | |||||
Show b => Show (GenStackFrame b) Source # | |||||
Defined in GHC.Exts.Heap.Closures | |||||
type Rep (GenStackFrame b) Source # | |||||
Defined in GHC.Exts.Heap.Closures type Rep (GenStackFrame b) = D1 ('MetaData "GenStackFrame" "GHC.Exts.Heap.Closures" "ghc-heap-9.10.0.20240313-2d27" 'False) (((C1 ('MetaCons "UpdateFrame" 'PrefixI 'True) (S1 ('MetaSel ('Just "info_tbl") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 StgInfoTable) :*: S1 ('MetaSel ('Just "updatee") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 b)) :+: C1 ('MetaCons "CatchFrame" 'PrefixI 'True) (S1 ('MetaSel ('Just "info_tbl") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 StgInfoTable) :*: S1 ('MetaSel ('Just "handler") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 b))) :+: (C1 ('MetaCons "CatchStmFrame" 'PrefixI 'True) (S1 ('MetaSel ('Just "info_tbl") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 StgInfoTable) :*: (S1 ('MetaSel ('Just "catchFrameCode") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 b) :*: S1 ('MetaSel ('Just "handler") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 b))) :+: (C1 ('MetaCons "CatchRetryFrame" 'PrefixI 'True) ((S1 ('MetaSel ('Just "info_tbl") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 StgInfoTable) :*: S1 ('MetaSel ('Just "running_alt_code") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Word)) :*: (S1 ('MetaSel ('Just "first_code") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 b) :*: S1 ('MetaSel ('Just "alt_code") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 b))) :+: C1 ('MetaCons "AtomicallyFrame" 'PrefixI 'True) (S1 ('MetaSel ('Just "info_tbl") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 StgInfoTable) :*: (S1 ('MetaSel ('Just "atomicallyFrameCode") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 b) :*: S1 ('MetaSel ('Just "result") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 b)))))) :+: ((C1 ('MetaCons "UnderflowFrame" 'PrefixI 'True) (S1 ('MetaSel ('Just "info_tbl") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 StgInfoTable) :*: S1 ('MetaSel ('Just "nextChunk") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 (GenStgStackClosure b))) :+: (C1 ('MetaCons "StopFrame" 'PrefixI 'True) (S1 ('MetaSel ('Just "info_tbl") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 StgInfoTable)) :+: C1 ('MetaCons "RetSmall" 'PrefixI 'True) (S1 ('MetaSel ('Just "info_tbl") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 StgInfoTable) :*: S1 ('MetaSel ('Just "stack_payload") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 [GenStackField b])))) :+: (C1 ('MetaCons "RetBig" 'PrefixI 'True) (S1 ('MetaSel ('Just "info_tbl") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 StgInfoTable) :*: S1 ('MetaSel ('Just "stack_payload") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 [GenStackField b])) :+: (C1 ('MetaCons "RetFun" 'PrefixI 'True) ((S1 ('MetaSel ('Just "info_tbl") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 StgInfoTable) :*: S1 ('MetaSel ('Just "retFunSize") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Word)) :*: (S1 ('MetaSel ('Just "retFunFun") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 b) :*: S1 ('MetaSel ('Just "retFunPayload") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 [GenStackField b]))) :+: C1 ('MetaCons "RetBCO" 'PrefixI 'True) (S1 ('MetaSel ('Just "info_tbl") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 StgInfoTable) :*: (S1 ('MetaSel ('Just "bco") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 b) :*: S1 ('MetaSel ('Just "bcoArgs") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 [GenStackField b]))))))) |
type StackField = GenStackField Box Source #
data GenStackField b Source #
Bitmap-encoded payload on the stack
Instances
Functor GenStackField Source # | |||||
Defined in GHC.Exts.Heap.Closures fmap :: (a -> b) -> GenStackField a -> GenStackField b Source # (<$) :: a -> GenStackField b -> GenStackField a Source # | |||||
Foldable GenStackField Source # | |||||
Defined in GHC.Exts.Heap.Closures fold :: Monoid m => GenStackField m -> m Source # foldMap :: Monoid m => (a -> m) -> GenStackField a -> m Source # foldMap' :: Monoid m => (a -> m) -> GenStackField a -> m Source # foldr :: (a -> b -> b) -> b -> GenStackField a -> b Source # foldr' :: (a -> b -> b) -> b -> GenStackField a -> b Source # foldl :: (b -> a -> b) -> b -> GenStackField a -> b Source # foldl' :: (b -> a -> b) -> b -> GenStackField a -> b Source # foldr1 :: (a -> a -> a) -> GenStackField a -> a Source # foldl1 :: (a -> a -> a) -> GenStackField a -> a Source # toList :: GenStackField a -> [a] Source # null :: GenStackField a -> Bool Source # length :: GenStackField a -> Int Source # elem :: Eq a => a -> GenStackField a -> Bool Source # maximum :: Ord a => GenStackField a -> a Source # minimum :: Ord a => GenStackField a -> a Source # sum :: Num a => GenStackField a -> a Source # product :: Num a => GenStackField a -> a Source # | |||||
Traversable GenStackField Source # | |||||
Defined in GHC.Exts.Heap.Closures traverse :: Applicative f => (a -> f b) -> GenStackField a -> f (GenStackField b) Source # sequenceA :: Applicative f => GenStackField (f a) -> f (GenStackField a) Source # mapM :: Monad m => (a -> m b) -> GenStackField a -> m (GenStackField b) Source # sequence :: Monad m => GenStackField (m a) -> m (GenStackField a) Source # | |||||
Generic (GenStackField b) Source # | |||||
Defined in GHC.Exts.Heap.Closures
from :: GenStackField b -> Rep (GenStackField b) x Source # to :: Rep (GenStackField b) x -> GenStackField b Source # | |||||
Show b => Show (GenStackField b) Source # | |||||
Defined in GHC.Exts.Heap.Closures | |||||
type Rep (GenStackField b) Source # | |||||
Defined in GHC.Exts.Heap.Closures type Rep (GenStackField b) = D1 ('MetaData "GenStackField" "GHC.Exts.Heap.Closures" "ghc-heap-9.10.0.20240313-2d27" 'False) (C1 ('MetaCons "StackWord" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Word)) :+: C1 ('MetaCons "StackBox" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 b))) |
Boxes
An arbitrary Haskell value in a safe Box. The point is that even
unevaluated thunks can safely be moved around inside the Box, and when
required, e.g. in getBoxedClosureData
, the function knows how far it has
to evaluate the argument.