Moduleghc-heap-9.10.3Haskell2010
GHC.Exts.Heap.Closures
- 13 types
- 4 values
- Packageghc-heap-9.10.3
- Exports17
- LanguageHaskell2010
- LicenceBSD-3-Clause
- SourceClosures.hs
Closures
8 declarationsThis 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.
Constructors
ConstrClosureA data constructor
FunClosureA function
info :: !StgInfoTableptrArgs :: ![b]Pointer arguments
dataArgs :: ![Word]Non-pointer arguments
ThunkClosureA thunk, an expression not obviously in head normal form
info :: !StgInfoTableptrArgs :: ![b]Pointer arguments
dataArgs :: ![Word]Non-pointer arguments
SelectorClosureA thunk which performs a simple selection operation
info :: !StgInfoTableselectee :: !bPointer to the object being selected from
PAPClosureAn unsaturated function application
info :: !StgInfoTablearity :: !HalfWordArity of the partial application
n_args :: !HalfWordSize of the payload in words
fun :: !bPointer to a FunClosure
payload :: ![b]Sequence of already applied arguments
APClosureA function application
info :: !StgInfoTablearity :: !HalfWordArity of the partial application
n_args :: !HalfWordSize of the payload in words
fun :: !bPointer to a FunClosure
payload :: ![b]Sequence of already applied arguments
APStackClosureA suspended thunk evaluation
info :: !StgInfoTablefun :: !bPointer to a FunClosure
payload :: ![b]Sequence of already applied arguments
IndClosureA pointer to another closure, introduced when a thunk is updated to point at its value
info :: !StgInfoTableindirectee :: !bTarget closure
BCOClosureA byte-code object (BCO) which can be interpreted by GHC's byte-code interpreter (e.g. as used by GHCi)
info :: !StgInfoTableinstrs :: !bA pointer to an ArrWords of instructions
literals :: !bA pointer to an ArrWords of literals
bcoptrs :: !bA pointer to an ArrWords of byte code objects
arity :: !HalfWordArity of the partial application
size :: !HalfWordThe size of this BCO in words
bitmap :: ![Word]An StgLargeBitmap describing the pointerhood of its args/free vars
BlackholeClosureA thunk under evaluation by another thread
info :: !StgInfoTableindirectee :: !bTarget closure
ArrWordsClosureA
ByteArray#MutArrClosureA
MutableByteArray#info :: !StgInfoTablemccPtrs :: !WordNumber of pointers
mccSize :: !Word?? Closures.h vs ClosureMacros.h
mccPayload :: ![b]Array payload Card table ignored
SmallMutArrClosureA
SmallMutableArray#info :: !StgInfoTablemccPtrs :: !WordNumber of pointers
mccPayload :: ![b]Array payload Card table ignored
MVarClosureAn
MVar#, with a queue of thread state objects blocking on theminfo :: !StgInfoTablequeueHead :: !bPointer to head of queue
queueTail :: !bPointer to tail of queue
value :: !bPointer to closure
IOPortClosureAn
IOPort#, with a queue of thread state objects blocking on theminfo :: !StgInfoTablequeueHead :: !bPointer to head of queue
queueTail :: !bPointer to tail of queue
value :: !bPointer to closure
MutVarClosureA
MutVar#info :: !StgInfoTablevar :: !bPointer to contents
BlockingQueueClosureAn STM blocking queue.
WeakClosureinfo :: !StgInfoTablecfinalizers :: !bkey :: !bvalue :: !bPointer to closure
finalizer :: !bweakLink :: !Maybe bnext weak pointer for the capability
TSOClosureRepresentation of StgTSO: A Thread State Object. The values for what_next, why_blocked and flags are defined in
Constants.h.info :: !StgInfoTablelink :: !b?? Here so it looks like an IND
global_link :: !btsoStack :: !bstackobj from StgTSO
trec :: !bblocked_exceptions :: !bbq :: !bthread_label :: !Maybe bwhat_next :: !WhatNextwhy_blocked :: !WhyBlockedflags :: ![TsoFlags]threadId :: !Word64saved_errno :: !Word32tso_dirty :: !Word32non-zero => dirty
alloc_limit :: !Int64tot_stack_size :: !Word32prof :: !Maybe StgTSOProfInfo
StackClosureRepresentation of StgStack: The 'tsoStack ' of a TSOClosure.
info :: !StgInfoTablestack_size :: !Word32stack size in *words*
stack_dirty :: !Word8non-zero => dirty
stack_marking :: !Word8
IntClosurePrimitive Int
WordClosurePrimitive Word
Int64ClosurePrimitive Int64
Word64ClosurePrimitive Word64
AddrClosurePrimitive Addr
FloatClosurePrimitive Float
DoubleClosurePrimitive Double
OtherClosureAnother kind of closure
info :: !StgInfoTablehvalues :: ![b]rawWords :: ![Word]
UnsupportedClosureinfo :: !StgInfoTable
UnknownTypeWordSizedPrimitiveA 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#).
Instances6Functor, Foldable, Traversable, Show, Generic, Rep
Functor GenClosureDefined in ghc-heap-9.10.3 · GHC.Exts.Heap.ClosuresFoldable GenClosureDefined in ghc-heap-9.10.3 · GHC.Exts.Heap.ClosuresTraversable GenClosureDefined in ghc-heap-9.10.3 · GHC.Exts.Heap.ClosuresShow b => Show (GenClosure b)Defined in ghc-heap-9.10.3 · GHC.Exts.Heap.ClosuresGeneric (GenClosure b)Defined in ghc-heap-9.10.3 · GHC.Exts.Heap.Closurestype Rep (GenClosure b) = D1 ('MetaDataDefined in ghc-heap-9.10.3 · GHC.Exts.Heap.Closures"GenClosure"
"GHC.Exts.Heap.Closures"
"ghc-heap-9.10.3-95d6"
'False) ((((C1 ('MetaCons"ConstrClosure"
'PrefixI 'True) ((S1 ('MetaSel ('Just"info"
) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 StgInfoTable) :*: (S1 ('MetaSel ('Just"ptrArgs"
) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 [b]) :*: S1 ('MetaSel ('Just"dataArgs"
) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 [Word]))) :*: (S1 ('MetaSel ('Just"pkg"
) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 String) :*: (S1 ('MetaSel ('Just"modl"
) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 String) :*: S1 ('MetaSel ('Just"name"
) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 String)))) :+: (C1 ('MetaCons"FunClosure"
'PrefixI 'True) (S1 ('MetaSel ('Just"info"
) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 StgInfoTable) :*: (S1 ('MetaSel ('Just"ptrArgs"
) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 [b]) :*: S1 ('MetaSel ('Just"dataArgs"
) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 [Word]))) :+: C1 ('MetaCons"ThunkClosure"
'PrefixI 'True) (S1 ('MetaSel ('Just"info"
) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 StgInfoTable) :*: (S1 ('MetaSel ('Just"ptrArgs"
) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 [b]) :*: S1 ('MetaSel ('Just"dataArgs"
) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 [Word]))))) :+: ((C1 ('MetaCons"SelectorClosure"
'PrefixI 'True) (S1 ('MetaSel ('Just"info"
) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 StgInfoTable) :*: S1 ('MetaSel ('Just"selectee"
) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 b)) :+: C1 ('MetaCons"PAPClosure"
'PrefixI 'True) ((S1 ('MetaSel ('Just"info"
) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 StgInfoTable) :*: S1 ('MetaSel ('Just"arity"
) 'NoSourceUnpackedness 'SourceStrict 'DecidedUnpack) (Rec0 HalfWord)) :*: (S1 ('MetaSel ('Just"n_args"
) 'NoSourceUnpackedness 'SourceStrict 'DecidedUnpack) (Rec0 HalfWord) :*: (S1 ('MetaSel ('Just"fun"
) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 b) :*: S1 ('MetaSel ('Just"payload"
) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 [b]))))) :+: (C1 ('MetaCons"APClosure"
'PrefixI 'True) ((S1 ('MetaSel ('Just"info"
) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 StgInfoTable) :*: S1 ('MetaSel ('Just"arity"
) 'NoSourceUnpackedness 'SourceStrict 'DecidedUnpack) (Rec0 HalfWord)) :*: (S1 ('MetaSel ('Just"n_args"
) 'NoSourceUnpackedness 'SourceStrict 'DecidedUnpack) (Rec0 HalfWord) :*: (S1 ('MetaSel ('Just"fun"
) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 b) :*: S1 ('MetaSel ('Just"payload"
) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 [b])))) :+: C1 ('MetaCons"APStackClosure"
'PrefixI 'True) (S1 ('MetaSel ('Just"info"
) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 StgInfoTable) :*: (S1 ('MetaSel ('Just"fun"
) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 b) :*: S1 ('MetaSel ('Just"payload"
) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 [b])))))) :+: (((C1 ('MetaCons"IndClosure"
'PrefixI 'True) (S1 ('MetaSel ('Just"info"
) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 StgInfoTable) :*: S1 ('MetaSel ('Just"indirectee"
) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 b)) :+: C1 ('MetaCons"BCOClosure"
'PrefixI 'True) ((S1 ('MetaSel ('Just"info"
) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 StgInfoTable) :*: (S1 ('MetaSel ('Just"instrs"
) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 b) :*: S1 ('MetaSel ('Just"literals"
) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 b))) :*: ((S1 ('MetaSel ('Just"bcoptrs"
) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 b) :*: S1 ('MetaSel ('Just"arity"
) 'NoSourceUnpackedness 'SourceStrict 'DecidedUnpack) (Rec0 HalfWord)) :*: (S1 ('MetaSel ('Just"size"
) 'NoSourceUnpackedness 'SourceStrict 'DecidedUnpack) (Rec0 HalfWord) :*: S1 ('MetaSel ('Just"bitmap"
) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 [Word]))))) :+: (C1 ('MetaCons"BlackholeClosure"
'PrefixI 'True) (S1 ('MetaSel ('Just"info"
) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 StgInfoTable) :*: S1 ('MetaSel ('Just"indirectee"
) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 b)) :+: C1 ('MetaCons"ArrWordsClosure"
'PrefixI 'True) (S1 ('MetaSel ('Just"info"
) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 StgInfoTable) :*: (S1 ('MetaSel ('Just"bytes"
) 'NoSourceUnpackedness 'SourceStrict 'DecidedUnpack) (Rec0 Word) :*: S1 ('MetaSel ('Just"arrWords"
) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 [Word]))))) :+: ((C1 ('MetaCons"MutArrClosure"
'PrefixI 'True) ((S1 ('MetaSel ('Just"info"
) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 StgInfoTable) :*: S1 ('MetaSel ('Just"mccPtrs"
) 'NoSourceUnpackedness 'SourceStrict 'DecidedUnpack) (Rec0 Word)) :*: (S1 ('MetaSel ('Just"mccSize"
) 'NoSourceUnpackedness 'SourceStrict 'DecidedUnpack) (Rec0 Word) :*: S1 ('MetaSel ('Just"mccPayload"
) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 [b]))) :+: C1 ('MetaCons"SmallMutArrClosure"
'PrefixI 'True) (S1 ('MetaSel ('Just"info"
) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 StgInfoTable) :*: (S1 ('MetaSel ('Just"mccPtrs"
) 'NoSourceUnpackedness 'SourceStrict 'DecidedUnpack) (Rec0 Word) :*: S1 ('MetaSel ('Just"mccPayload"
) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 [b])))) :+: (C1 ('MetaCons"MVarClosure"
'PrefixI 'True) ((S1 ('MetaSel ('Just"info"
) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 StgInfoTable) :*: S1 ('MetaSel ('Just"queueHead"
) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 b)) :*: (S1 ('MetaSel ('Just"queueTail"
) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 b) :*: S1 ('MetaSel ('Just"value"
) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 b))) :+: C1 ('MetaCons"IOPortClosure"
'PrefixI 'True) ((S1 ('MetaSel ('Just"info"
) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 StgInfoTable) :*: S1 ('MetaSel ('Just"queueHead"
) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 b)) :*: (S1 ('MetaSel ('Just"queueTail"
) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 b) :*: S1 ('MetaSel ('Just"value"
) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 b))))))) :+: (((C1 ('MetaCons"MutVarClosure"
'PrefixI 'True) (S1 ('MetaSel ('Just"info"
) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 StgInfoTable) :*: S1 ('MetaSel ('Just"var"
) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 b)) :+: (C1 ('MetaCons"BlockingQueueClosure"
'PrefixI 'True) ((S1 ('MetaSel ('Just"info"
) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 StgInfoTable) :*: S1 ('MetaSel ('Just"link"
) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 b)) :*: (S1 ('MetaSel ('Just"blackHole"
) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 b) :*: (S1 ('MetaSel ('Just"owner"
) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 b) :*: S1 ('MetaSel ('Just"queue"
) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 b)))) :+: C1 ('MetaCons"WeakClosure"
'PrefixI 'True) ((S1 ('MetaSel ('Just"info"
) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 StgInfoTable) :*: (S1 ('MetaSel ('Just"cfinalizers"
) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 b) :*: S1 ('MetaSel ('Just"key"
) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 b))) :*: (S1 ('MetaSel ('Just"value"
) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 b) :*: (S1 ('MetaSel ('Just"finalizer"
) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 b) :*: S1 ('MetaSel ('Just"weakLink"
) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 (Maybe b))))))) :+: ((C1 ('MetaCons"TSOClosure"
'PrefixI 'True) ((((S1 ('MetaSel ('Just"info"
) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 StgInfoTable) :*: S1 ('MetaSel ('Just"link"
) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 b)) :*: (S1 ('MetaSel ('Just"global_link"
) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 b) :*: S1 ('MetaSel ('Just"tsoStack"
) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 b))) :*: ((S1 ('MetaSel ('Just"trec"
) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 b) :*: S1 ('MetaSel ('Just"blocked_exceptions"
) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 b)) :*: (S1 ('MetaSel ('Just"bq"
) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 b) :*: S1 ('MetaSel ('Just"thread_label"
) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 (Maybe b))))) :*: (((S1 ('MetaSel ('Just"what_next"
) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 WhatNext) :*: S1 ('MetaSel ('Just"why_blocked"
) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 WhyBlocked)) :*: (S1 ('MetaSel ('Just"flags"
) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 [TsoFlags]) :*: S1 ('MetaSel ('Just"threadId"
) 'NoSourceUnpackedness 'SourceStrict 'DecidedUnpack) (Rec0 Word64))) :*: ((S1 ('MetaSel ('Just"saved_errno"
) 'NoSourceUnpackedness 'SourceStrict 'DecidedUnpack) (Rec0 Word32) :*: S1 ('MetaSel ('Just"tso_dirty"
) 'NoSourceUnpackedness 'SourceStrict 'DecidedUnpack) (Rec0 Word32)) :*: (S1 ('MetaSel ('Just"alloc_limit"
) 'NoSourceUnpackedness 'SourceStrict 'DecidedUnpack) (Rec0 Int64) :*: (S1 ('MetaSel ('Just"tot_stack_size"
) 'NoSourceUnpackedness 'SourceStrict 'DecidedUnpack) (Rec0 Word32) :*: S1 ('MetaSel ('Just"prof"
) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 (Maybe StgTSOProfInfo))))))) :+: C1 ('MetaCons"StackClosure"
'PrefixI 'True) ((S1 ('MetaSel ('Just"info"
) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 StgInfoTable) :*: S1 ('MetaSel ('Just"stack_size"
) 'NoSourceUnpackedness 'SourceStrict 'DecidedUnpack) (Rec0 Word32)) :*: (S1 ('MetaSel ('Just"stack_dirty"
) 'NoSourceUnpackedness 'SourceStrict 'DecidedUnpack) (Rec0 Word8) :*: S1 ('MetaSel ('Just"stack_marking"
) 'NoSourceUnpackedness 'SourceStrict 'DecidedUnpack) (Rec0 Word8)))) :+: (C1 ('MetaCons"IntClosure"
'PrefixI 'True) (S1 ('MetaSel ('Just"ptipe"
) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 PrimType) :*: S1 ('MetaSel ('Just"intVal"
) 'NoSourceUnpackedness 'SourceStrict 'DecidedUnpack) (Rec0 Int)) :+: C1 ('MetaCons"WordClosure"
'PrefixI 'True) (S1 ('MetaSel ('Just"ptipe"
) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 PrimType) :*: S1 ('MetaSel ('Just"wordVal"
) 'NoSourceUnpackedness 'SourceStrict 'DecidedUnpack) (Rec0 Word))))) :+: (((C1 ('MetaCons"Int64Closure"
'PrefixI 'True) (S1 ('MetaSel ('Just"ptipe"
) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 PrimType) :*: S1 ('MetaSel ('Just"int64Val"
) 'NoSourceUnpackedness 'SourceStrict 'DecidedUnpack) (Rec0 Int64)) :+: C1 ('MetaCons"Word64Closure"
'PrefixI 'True) (S1 ('MetaSel ('Just"ptipe"
) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 PrimType) :*: S1 ('MetaSel ('Just"word64Val"
) 'NoSourceUnpackedness 'SourceStrict 'DecidedUnpack) (Rec0 Word64))) :+: (C1 ('MetaCons"AddrClosure"
'PrefixI 'True) (S1 ('MetaSel ('Just"ptipe"
) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 PrimType) :*: S1 ('MetaSel ('Just"addrVal"
) 'NoSourceUnpackedness 'SourceStrict 'DecidedUnpack) (Rec0 (Ptr ()))) :+: C1 ('MetaCons"FloatClosure"
'PrefixI 'True) (S1 ('MetaSel ('Just"ptipe"
) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 PrimType) :*: S1 ('MetaSel ('Just"floatVal"
) 'NoSourceUnpackedness 'SourceStrict 'DecidedUnpack) (Rec0 Float)))) :+: ((C1 ('MetaCons"DoubleClosure"
'PrefixI 'True) (S1 ('MetaSel ('Just"ptipe"
) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 PrimType) :*: S1 ('MetaSel ('Just"doubleVal"
) 'NoSourceUnpackedness 'SourceStrict 'DecidedUnpack) (Rec0 Double)) :+: C1 ('MetaCons"OtherClosure"
'PrefixI 'True) (S1 ('MetaSel ('Just"info"
) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 StgInfoTable) :*: (S1 ('MetaSel ('Just"hvalues"
) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 [b]) :*: S1 ('MetaSel ('Just"rawWords"
) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 [Word])))) :+: (C1 ('MetaCons"UnsupportedClosure"
'PrefixI 'True) (S1 ('MetaSel ('Just"info"
) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 StgInfoTable)) :+: C1 ('MetaCons"UnknownTypeWordSizedPrimitive"
'PrefixI 'True) (S1 ('MetaSel ('Just"wordVal"
) 'NoSourceUnpackedness 'SourceStrict 'DecidedUnpack) (Rec0 Word)))))))
Instances5Eq, Ord, Show, Generic, Rep
Eq PrimTypeDefined in ghc-heap-9.10.3 · GHC.Exts.Heap.ClosuresOrd PrimTypeDefined in ghc-heap-9.10.3 · GHC.Exts.Heap.ClosuresShow PrimTypeDefined in ghc-heap-9.10.3 · GHC.Exts.Heap.ClosuresGeneric PrimTypeDefined in ghc-heap-9.10.3 · GHC.Exts.Heap.Closurestype Rep PrimType = D1 ('MetaDataDefined in ghc-heap-9.10.3 · GHC.Exts.Heap.Closures"PrimType"
"GHC.Exts.Heap.Closures"
"ghc-heap-9.10.3-95d6"
'False) ((C1 ('MetaCons"PInt"
'PrefixI 'False) U1 :+: (C1 ('MetaCons"PWord"
'PrefixI 'False) U1 :+: C1 ('MetaCons"PInt64"
'PrefixI 'False) U1)) :+: ((C1 ('MetaCons"PWord64"
'PrefixI 'False) U1 :+: C1 ('MetaCons"PAddr"
'PrefixI 'False) U1) :+: (C1 ('MetaCons"PFloat"
'PrefixI 'False) U1 :+: C1 ('MetaCons"PDouble"
'PrefixI 'False) U1)))
Constructors
ThreadRunGHCThreadInterpretThreadKilledThreadCompleteWhatNextUnknownValue Word16Please report this as a bug
Instances5Eq, Ord, Show, Generic, Rep
Eq WhatNextDefined in ghc-heap-9.10.3 · GHC.Exts.Heap.ClosuresOrd WhatNextDefined in ghc-heap-9.10.3 · GHC.Exts.Heap.ClosuresShow WhatNextDefined in ghc-heap-9.10.3 · GHC.Exts.Heap.ClosuresGeneric WhatNextDefined in ghc-heap-9.10.3 · GHC.Exts.Heap.Closurestype Rep WhatNext = D1 ('MetaDataDefined in ghc-heap-9.10.3 · GHC.Exts.Heap.Closures"WhatNext"
"GHC.Exts.Heap.Closures"
"ghc-heap-9.10.3-95d6"
'False) ((C1 ('MetaCons"ThreadRunGHC"
'PrefixI 'False) U1 :+: C1 ('MetaCons"ThreadInterpret"
'PrefixI 'False) U1) :+: (C1 ('MetaCons"ThreadKilled"
'PrefixI 'False) U1 :+: (C1 ('MetaCons"ThreadComplete"
'PrefixI 'False) U1 :+: C1 ('MetaCons"WhatNextUnknownValue"
'PrefixI 'False) (S1 ('MetaSel 'Nothing 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Word16)))))
Instances5Eq, Ord, Show, Generic, Rep
Eq WhyBlockedDefined in ghc-heap-9.10.3 · GHC.Exts.Heap.ClosuresOrd WhyBlockedDefined in ghc-heap-9.10.3 · GHC.Exts.Heap.ClosuresShow WhyBlockedDefined in ghc-heap-9.10.3 · GHC.Exts.Heap.ClosuresGeneric WhyBlockedDefined in ghc-heap-9.10.3 · GHC.Exts.Heap.Closurestype Rep WhyBlocked = D1 ('MetaDataDefined in ghc-heap-9.10.3 · GHC.Exts.Heap.Closures"WhyBlocked"
"GHC.Exts.Heap.Closures"
"ghc-heap-9.10.3-95d6"
'False) (((C1 ('MetaCons"NotBlocked"
'PrefixI 'False) U1 :+: (C1 ('MetaCons"BlockedOnMVar"
'PrefixI 'False) U1 :+: C1 ('MetaCons"BlockedOnMVarRead"
'PrefixI 'False) U1)) :+: ((C1 ('MetaCons"BlockedOnBlackHole"
'PrefixI 'False) U1 :+: C1 ('MetaCons"BlockedOnRead"
'PrefixI 'False) U1) :+: (C1 ('MetaCons"BlockedOnWrite"
'PrefixI 'False) U1 :+: C1 ('MetaCons"BlockedOnDelay"
'PrefixI 'False) U1))) :+: ((C1 ('MetaCons"BlockedOnSTM"
'PrefixI 'False) U1 :+: (C1 ('MetaCons"BlockedOnDoProc"
'PrefixI 'False) U1 :+: C1 ('MetaCons"BlockedOnCCall"
'PrefixI 'False) U1)) :+: ((C1 ('MetaCons"BlockedOnCCall_Interruptible"
'PrefixI 'False) U1 :+: C1 ('MetaCons"BlockedOnMsgThrowTo"
'PrefixI 'False) U1) :+: (C1 ('MetaCons"ThreadMigrating"
'PrefixI 'False) U1 :+: C1 ('MetaCons"WhyBlockedUnknownValue"
'PrefixI 'False) (S1 ('MetaSel 'Nothing 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Word16))))))
Constructors
Instances5Eq, Ord, Show, Generic, Rep
Eq TsoFlagsDefined in ghc-heap-9.10.3 · GHC.Exts.Heap.ClosuresOrd TsoFlagsDefined in ghc-heap-9.10.3 · GHC.Exts.Heap.ClosuresShow TsoFlagsDefined in ghc-heap-9.10.3 · GHC.Exts.Heap.ClosuresGeneric TsoFlagsDefined in ghc-heap-9.10.3 · GHC.Exts.Heap.Closurestype Rep TsoFlags = D1 ('MetaDataDefined in ghc-heap-9.10.3 · GHC.Exts.Heap.Closures"TsoFlags"
"GHC.Exts.Heap.Closures"
"ghc-heap-9.10.3-95d6"
'False) (((C1 ('MetaCons"TsoLocked"
'PrefixI 'False) U1 :+: C1 ('MetaCons"TsoBlockx"
'PrefixI 'False) U1) :+: (C1 ('MetaCons"TsoInterruptible"
'PrefixI 'False) U1 :+: C1 ('MetaCons"TsoStoppedOnBreakpoint"
'PrefixI 'False) U1)) :+: ((C1 ('MetaCons"TsoMarked"
'PrefixI 'False) U1 :+: C1 ('MetaCons"TsoSqueezed"
'PrefixI 'False) U1) :+: (C1 ('MetaCons"TsoAllocLimit"
'PrefixI 'False) U1 :+: C1 ('MetaCons"TsoFlagsUnknownValue"
'PrefixI 'False) (S1 ('MetaSel 'Nothing 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Word32)))))
For generic code, this function returns all referenced closures.
Get the size of the top-level closure in words. Includes header and payload. Does not follow pointers.
Stack
6 declarationsA decoded StgStack with StackFrames
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.)
Constructors
GenStgStackClosuressc_info :: !StgInfoTablessc_stack_size :: !Word32stack size in *words*
ssc_stack :: ![GenStackFrame b]
Instances6Functor, Foldable, Traversable, Show, Generic, Rep
Functor GenStgStackClosureDefined in ghc-heap-9.10.3 · GHC.Exts.Heap.ClosuresFoldable GenStgStackClosureDefined in ghc-heap-9.10.3 · GHC.Exts.Heap.ClosuresTraversable GenStgStackClosureDefined in ghc-heap-9.10.3 · GHC.Exts.Heap.ClosuresShow b => Show (GenStgStackClosure b)Defined in ghc-heap-9.10.3 · GHC.Exts.Heap.ClosuresGeneric (GenStgStackClosure b)Defined in ghc-heap-9.10.3 · GHC.Exts.Heap.Closurestype Rep (GenStgStackClosure b) = D1 ('MetaDataDefined in ghc-heap-9.10.3 · GHC.Exts.Heap.Closures"GenStgStackClosure"
"GHC.Exts.Heap.Closures"
"ghc-heap-9.10.3-95d6"
'False) (C1 ('MetaCons"GenStgStackClosure"
'PrefixI 'True) (S1 ('MetaSel ('Just"ssc_info"
) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 StgInfoTable) :*: (S1 ('MetaSel ('Just"ssc_stack_size"
) 'NoSourceUnpackedness 'SourceStrict 'DecidedUnpack) (Rec0 Word32) :*: S1 ('MetaSel ('Just"ssc_stack"
) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 [GenStackFrame b]))))
A single stack frame
Constructors
UpdateFrameinfo_tbl :: !StgInfoTableupdatee :: !b
CatchFrameinfo_tbl :: !StgInfoTablehandler :: !b
CatchStmFrameinfo_tbl :: !StgInfoTablecatchFrameCode :: !bhandler :: !b
CatchRetryFrameinfo_tbl :: !StgInfoTablerunning_alt_code :: !Wordfirst_code :: !balt_code :: !b
AtomicallyFrameinfo_tbl :: !StgInfoTableatomicallyFrameCode :: !bresult :: !b
UnderflowFrameinfo_tbl :: !StgInfoTablenextChunk :: !GenStgStackClosure b
StopFrameinfo_tbl :: !StgInfoTable
RetSmallinfo_tbl :: !StgInfoTablestack_payload :: ![GenStackField b]
RetBiginfo_tbl :: !StgInfoTablestack_payload :: ![GenStackField b]
RetFuninfo_tbl :: !StgInfoTableretFunSize :: !WordretFunFun :: !bretFunPayload :: ![GenStackField b]
RetBCOinfo_tbl :: !StgInfoTablebco :: !balways a BCOClosure
bcoArgs :: ![GenStackField b]
Instances6Functor, Foldable, Traversable, Show, Generic, Rep
Functor GenStackFrameDefined in ghc-heap-9.10.3 · GHC.Exts.Heap.ClosuresFoldable GenStackFrameDefined in ghc-heap-9.10.3 · GHC.Exts.Heap.ClosuresTraversable GenStackFrameDefined in ghc-heap-9.10.3 · GHC.Exts.Heap.ClosuresShow b => Show (GenStackFrame b)Defined in ghc-heap-9.10.3 · GHC.Exts.Heap.ClosuresGeneric (GenStackFrame b)Defined in ghc-heap-9.10.3 · GHC.Exts.Heap.Closurestype Rep (GenStackFrame b) = D1 ('MetaDataDefined in ghc-heap-9.10.3 · GHC.Exts.Heap.Closures"GenStackFrame"
"GHC.Exts.Heap.Closures"
"ghc-heap-9.10.3-95d6"
'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 'DecidedUnpack) (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 'DecidedUnpack) (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])))))))
Bitmap-encoded payload on the stack
Instances6Functor, Foldable, Traversable, Show, Generic, Rep
Functor GenStackFieldDefined in ghc-heap-9.10.3 · GHC.Exts.Heap.ClosuresFoldable GenStackFieldDefined in ghc-heap-9.10.3 · GHC.Exts.Heap.ClosuresTraversable GenStackFieldDefined in ghc-heap-9.10.3 · GHC.Exts.Heap.ClosuresShow b => Show (GenStackField b)Defined in ghc-heap-9.10.3 · GHC.Exts.Heap.ClosuresGeneric (GenStackField b)Defined in ghc-heap-9.10.3 · GHC.Exts.Heap.Closurestype Rep (GenStackField b) = D1 ('MetaDataDefined in ghc-heap-9.10.3 · GHC.Exts.Heap.Closures"GenStackField"
"GHC.Exts.Heap.Closures"
"ghc-heap-9.10.3-95d6"
'False) (C1 ('MetaCons"StackWord"
'PrefixI 'False) (S1 ('MetaSel 'Nothing 'NoSourceUnpackedness 'SourceStrict 'DecidedUnpack) (Rec0 Word)) :+: C1 ('MetaCons"StackBox"
'PrefixI 'False) (S1 ('MetaSel 'Nothing 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 b)))
Boxes
3 declarationsAn 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.
Boxes can be compared, but this is not pure, as different heap objects can, after garbage collection, become the same object.
This takes an arbitrary value and puts it into a box. Note that calls like
asBox (head list)will put the thunk "head list" into the box, not the element at the head of the list. For that, use careful case expressions:
case list of x:_ -> asBox x