úÎ?8<™1      !"#$%&'()*+,-./0dennis@felsin9.de Safe-InferedOSimple representation of objects on the heap, so they can be arranged linearly HThe second HeapMap includes BCO pointers, needed for list visualization A map of heap objects. We'?re using a slow, eq-based list instead of a proper map because  StableNames' hash values aren't stable enough An entry in a :, consisting of an identifier and a parsed GHC heap entry .The global state used for the visualizations. ;Current position of the mouse, updated with every movement 0What kind of visualization is currently running Visualization views 3Signals that are sent to the GUI to signal changes Export the view to a file Switch to alternative view Remove all Boxes Redraw Add a new Box to be visualized  1      1dennis@felsin9.de Safe-Infered?Walk the heap for a list of objects to be visualized and their  corresponding names. ?Walk the heap for a list of objects to be visualized and their 2 corresponding names. Also return the resulting  and another  % that does not contain BCO pointers. JRecursively walk down the heap objects and return the resulting map. This N function recognizes loops and avoids them. Big data structures might still  be very slow. Follows 2)s, but not the debugging data structures % (ByteCodeInstr.BreakInfo) of GHC. ITextual representation of Heap objects, used in the graph visualization. dennis@felsin9.de Safe-Infered+Communication channel to the visualization -Whether a visualization is currently running $Internal state of the visualization All the visualized boxes +Evaluate an object identified by a String. dennis@felsin9.de Safe-Infered?Draw visualization to screen, called on every update or when it's ' requested from outside the program. (Export the visualization to an SVG file !2Handle a mouse click. If an object was clicked an  is sent H that causes the object to be evaluated and the screen to be updated. "Handle a mouse move. Causes an  if the mouse is hovering a G different object now, so the object gets highlighted and the screen  updated. #;Something might have changed on the heap, update the view.  !"# !"# !"# !"#dennis@felsin9.de Safe-Infered$7Take the objects to be visualized and run them through dot and extract L the drawing operations that have to be exectued to show the graph of the  heap map. $$$$dennis@felsin9.de Safe-Infered%?Draw visualization to screen, called on every update or when it's ' requested from outside the program. &(Export the visualization to an SVG file '2Handle a mouse click. If an object was clicked an  is sent H that causes the object to be evaluated and the screen to be updated. (Handle a mouse move. Causes an  if the mouse is hovering a G different object now, so the object gets highlighted and the screen  updated. );Something might have changed on the heap, update the view. %&'()%&'()&%'()%&'()dennis@felsin9.de Safe-Infered*This is the main function. It'(s to be called from GHCi and launches a % graphical window in a new thread. +9Add expressions with a name to the visualization window. ,IEvaluate an object that is shown in the visualization. (Names start with t) -0Switch between the list view and the graph view .DWhen an object is updated by accessing it, you have to call this to N refresh the visualization window. You can also click on an object to force  an update. /BClear the visualization window, removing all expressions from it. 06Export the current visualization view to an SVG file. *+,-./0*+,-./0*+,-./0*+,-./03      !"#$%&'()*+&'()*,-./0'12345 ghc-vis-0.2 GHC.Vis.TypesGHC.Vis.InternalGHC.Vis.GTK.CommonGHC.Vis.GTK.List GHC.Vis.GraphGHC.Vis.GTK.GraphGHC.Vis VisObjectFunctionLinkNamedUnnamed PrintStateHeapMap HeapEntryStatemousePosviewViewType GraphViewListViewSignal ExportSignal SwitchSignal ClearSignal UpdateSignal NewSignal parseBoxesparseBoxesHeapwalkHeappointersToFollow2 showClosure visSignal visRunningvisStatevisBoxesevaluateredrawexportclickmove updateObjects xDotParse visualizationevalswitchupdateclear$fShowVisObjectghc-heap-view-0.3 GHC.HeapView BCOClosure