h""E      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ Safe-Inferred8Bghc-heap/Return the size of the closures header in words  !"#$%&'()*+,-./0123456789:;<=>?@AB  !"#$%&'()*+,-./0123456789:;<=>?@AB Safe-InferredHIJHJI Safe-Inferred8Kghc-heapThis is a somewhat faithful representation of an info table. See  https://gitlab.haskell.org/ghc/ghc/blob/master/includes/rts/storage/InfoTables.h* for more details on this data structure. KLMNOPQRSTU KLMNOPQRSTU Safe-InferredXghc-heapRead an InfoTable from the heap into a haskell type. WARNING: This code assumes it is passed a pointer to a "standard" info table. If tables_next_to_code is enabled, it will look 1 byte before the start for the entry field.Zghc-heap%Size in bytes of a standard InfoTableKLRQPOMNSTUXYZZXY Safe-Inferred[ghc-heapRead an InfoTable from the heap into a haskell type. WARNING: This code assumes it is passed a pointer to a "standard" info table. If tables_next_to_code is enabled, it will look 1 byte before the start for the entry field.KLRQPOMNSTU[\]][\None #$5678;fghc-heapThis is the representation of a Haskell value on the heap. It reflects https://gitlab.haskell.org/ghc/ghc/blob/master/includes/rts/storage/Closures.hThe data type is parametrized by the type to store references in. Usually this is a  with the type synonym .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.gghc-heapA data constructorhghc-heap A functionighc-heap8A thunk, an expression not obviously in head normal formjghc-heap3A thunk which performs a simple selection operationkghc-heap#An unsaturated function applicationlghc-heapA function applicationmghc-heapA suspended thunk evaluationnghc-heapA pointer to another closure, introduced when a thunk is updated to point at its valueoghc-heapA byte-code object (BCO) which can be interpreted by GHC's byte-code interpreter (e.g. as used by GHCi)pghc-heap*A thunk under evaluation by another threadqghc-heapA  ByteArray#rghc-heapA MutableByteArray#s ghc-heapA SmallMutableArray#tghc-heapAn MVar#7, with a queue of thread state objects blocking on themughc-heapA MutVar#vghc-heapAn STM blocking queue.xghc-heap Primitive Intyghc-heapPrimitive Wordzghc-heapPrimitive Int64{ghc-heapPrimitive Word64|ghc-heapPrimitive Addr}ghc-heapPrimitive Float~ghc-heapPrimitive Doubleghc-heapAnother kind of closureghc-heapPointer argumentsghc-heapNon-pointer argumentsghc-heap Package nameghc-heap Module nameghc-heapConstructor nameghc-heap,Pointer to the object being selected fromghc-heap Arity of the partial applicationghc-heapSize of the payload in wordsghc-heap Pointer to a hghc-heap(Sequence of already applied argumentsghc-heapTarget closureghc-heap+A pointer to an ArrWords of instructionsghc-heap'A pointer to an ArrWords of literalsghc-heap0A pointer to an ArrWords of byte code objectsghc-heapThe size of this BCO in wordsghc-heapAn StgLargeBitmap describing the pointerhood of its args/free varsghc-heapSize of array in bytesghc-heap Array payloadghc-heapNumber of pointersghc-heap ?? Closures.h vs ClosureMacros.hghc-heap!Array payload Card table ignoredghc-heapPointer to head of queueghc-heapPointer to tail of queueghc-heapPointer to closureghc-heapPointer to contentsghc-heap?? Here so it looks like an INDghc-heapThe blackhole closureghc-heapThe owning thread state objectghc-heap??ghc-heapAn 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.ghc-heapThis 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 xghc-heapBoxes can be compared, but this is not pure, as different heap objects can, after garbage collection, become the same object.ghc-heapFor generic code, this function returns all referenced closures. ghc-heapGet the size of the top-level closure in words. Includes header and payload. Does not follow pointers.^_`abcdefghijklmnopqrstuvwxyz{|}~fghijklmnopqrstuvwxyz{|}~^_`abcdeNone(c) 2012 Joachim BreitnerBSD3+Joachim Breitner None ./>>ghc-heapThis returns the raw representation of the given argument. The second component of the triple is the raw words of the closure on the heap, and the third component is those words that are actually pointers. Once back in the Haskell world, the raw words that hold pointers may be outdated after a garbage collector run, but the corresponding values in )s will still point to the correct value.ghc-heapThis function returns a parsed heap representation of the argument _at this moment_, even if it is unevaluated or an indirection or other exotic stuff. Beware when passing something to this function, the same caveats as for  apply.ghc-heapLike , but taking a , so it is easier to work with.  !"#$%&'()*+,-./0123456789:;<=>?@AKLMNOPQRSTUXYZ^_`abcdefghijklmnopqrstuvwxyz{|}~fghijklmnopqrstuvwxyz{|}~  !"#$%&'()*+,-./0123456789:;<=>?@A^_`abcdeKLMNOPQRSTUZXY      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTTUVWXYZ[\]^_`ab`abcdefghijklmnopqrstuvwxyz{|}~ghc-heap-8.11.0.20200524GHC.Exts.Heap.ClosureTypesGHC.Exts.Heap.ConstantsGHC.Exts.Heap.InfoTable.TypesGHC.Exts.Heap.InfoTableGHC.Exts.Heap.InfoTableProfGHC.Exts.Heap.ClosuresGHC.Exts.Heap.Utils GHC.Exts.Heap ClosureTypeINVALID_OBJECTCONSTR CONSTR_1_0 CONSTR_0_1 CONSTR_2_0 CONSTR_1_1 CONSTR_0_2 CONSTR_NOCAFFUNFUN_1_0FUN_0_1FUN_2_0FUN_1_1FUN_0_2 FUN_STATICTHUNK THUNK_1_0 THUNK_0_1 THUNK_2_0 THUNK_1_1 THUNK_0_2 THUNK_STATICTHUNK_SELECTORBCOAPPAPAP_STACKIND IND_STATICRET_BCO RET_SMALLRET_BIGRET_FUN UPDATE_FRAME CATCH_FRAMEUNDERFLOW_FRAME STOP_FRAMEBLOCKING_QUEUE BLACKHOLE MVAR_CLEAN MVAR_DIRTYTVAR ARR_WORDSMUT_ARR_PTRS_CLEANMUT_ARR_PTRS_DIRTYMUT_ARR_PTRS_FROZEN_DIRTYMUT_ARR_PTRS_FROZEN_CLEAN MUT_VAR_CLEAN MUT_VAR_DIRTYWEAKPRIMMUT_PRIMTSOSTACK TREC_CHUNKATOMICALLY_FRAMECATCH_RETRY_FRAMECATCH_STM_FRAME WHITEHOLESMALL_MUT_ARR_PTRS_CLEANSMALL_MUT_ARR_PTRS_DIRTYSMALL_MUT_ARR_PTRS_FROZEN_DIRTYSMALL_MUT_ARR_PTRS_FROZEN_CLEANCOMPACT_NFDATAN_CLOSURE_TYPESclosureTypeHeaderSize$fEnumClosureType$fEqClosureType$fOrdClosureType$fShowClosureType$fGenericClosureType wORD_SIZEwORD_SIZE_IN_BITStAG_MASK StgInfoTableentryptrsnptrstipesrtlencode EntryFunPtrHalfWord ItblCodes$fShowStgInfoTable$fGenericStgInfoTablepeekItblpokeItblitblSizePrimTypePIntPWordPInt64PWord64PAddrPFloatPDouble GenClosure ConstrClosure FunClosure ThunkClosureSelectorClosure PAPClosure APClosureAPStackClosure IndClosure BCOClosureBlackholeClosureArrWordsClosure MutArrClosureSmallMutArrClosure MVarClosure MutVarClosureBlockingQueueClosure WeakClosure IntClosure WordClosure Int64Closure Word64Closure AddrClosure FloatClosure DoubleClosure OtherClosureUnsupportedClosureinfoptrArgsdataArgspkgmodlnameselecteearityn_argsfunpayload indirecteeinstrsliteralsbcoptrssizebitmapbytesarrWordsmccPtrsmccSize mccPayload queueHead queueTailvaluevarlink blackHoleownerqueue cfinalizerskey finalizerptipeintValwordValint64Val word64ValaddrValfloatVal doubleValhvaluesrawWordsClosureBoxasBox areBoxesEqual allClosures closureSize $fShowBox$fShowGenClosure$fGenericGenClosure$fFunctorGenClosure$fFoldableGenClosure$fTraversableGenClosure $fEqPrimType$fShowPrimType$fGenericPrimType dataConNames HasHeapRepgetClosureDatagetBoxedClosureData$fHasHeapRepDoubleRepa$fHasHeapRepFloatRepa$fHasHeapRepAddrRepa$fHasHeapRepWord64Repa$fHasHeapRepInt64Repa$fHasHeapRepWordRepa$fHasHeapRepIntRepa$fHasHeapRepUnliftedRepa$fHasHeapRepLiftedRepa getClosureRaw getClosure