| Safe Haskell | None |
|---|---|
| Language | Haskell2010 |
GHC.Exts.Heap.Closures
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
- data PrimType
- data WhatNext
- data WhyBlocked
- data TsoFlags
- allClosures :: GenClosure b -> [b]
- closureSize :: Box -> Int
- data Box = Box Any
- 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.
Constructors
| ConstrClosure | A data constructor |
| FunClosure | A function |
Fields
| |
| ThunkClosure | A thunk, an expression not obviously in head normal form |
Fields
| |
| SelectorClosure | A thunk which performs a simple selection operation |
Fields
| |
| PAPClosure | An unsaturated function application |
Fields
| |
| APClosure | A function application |
Fields
| |
| APStackClosure | A suspended thunk evaluation |
Fields
| |
| IndClosure | A pointer to another closure, introduced when a thunk is updated to point at its value |
Fields
| |
| BCOClosure | A byte-code object (BCO) which can be interpreted by GHC's byte-code interpreter (e.g. as used by GHCi) |
Fields
| |
| BlackholeClosure | A thunk under evaluation by another thread |
Fields
| |
| ArrWordsClosure | A |
| MutArrClosure | A |
Fields
| |
| SmallMutArrClosure | A Since: 8.10.1 |
Fields
| |
| MVarClosure | An |
Fields
| |
| IOPortClosure | An |
Fields
| |
| MutVarClosure | A |
Fields
| |
| BlockingQueueClosure | An STM blocking queue. |
| WeakClosure | |
Fields
| |
| TSOClosure | Representation of StgTSO: A Thread State Object. The values for
|
Fields
| |
| StackClosure | Representation of StgStack: The 'tsoStack ' of a |
Fields
| |
| 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 |
Fields
| |
| UnsupportedClosure | |
Fields
| |
Instances
Instances
| Generic PrimType Source # | |
| Show PrimType Source # | |
| Binary 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-lib-parser-9.6.2.20231121-AT4lm4JncfoHD52mAnAOpU" '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)))) | |
Constructors
| ThreadRunGHC | |
| ThreadInterpret | |
| ThreadKilled | |
| ThreadComplete | |
| WhatNextUnknownValue Word16 | Please report this as a bug |
Instances
| Generic WhatNext Source # | |
| Show WhatNext Source # | |
| Binary 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-lib-parser-9.6.2.20231121-AT4lm4JncfoHD52mAnAOpU" '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 #
Constructors
Instances
Constructors
| TsoLocked | |
| TsoBlockx | |
| TsoInterruptible | |
| TsoStoppedOnBreakpoint | |
| TsoMarked | |
| TsoSqueezed | |
| TsoAllocLimit | |
| TsoFlagsUnknownValue Word32 | Please report this as a bug |
Instances
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: 8.10.1
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.