TK=dennis@felsin9.deNoneOSimple representation of objects on the heap, so they can be arranged linearly "The state of a printing operation 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 !How much the window is zoomed in Current position in the zoom Whether the mouse is dragging 'Whether the mouse was actually dragged Visualization views $All functions a view has to provide 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 .A function to draw a cairo drawing to a file. A simple Point + !" #$%&'( )*+,-./012* !" #$%&'( )*+,-./01 "!  #$%&'( )+*,-./012dennis@felsin9.deNone 3IMaximum depth which walkHeap recurses to. Prevents users from evaluating L data structures which are too big and would take very long to visualize. 4?Walk the heap for a list of objects to be visualized and their  corresponding names. 5?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. 6JRecursively 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. 7&walkHeap, but without Top level names 8Follows 9)s, but not the debugging data structures % (ByteCodeInstr.BreakInfo) of GHC. :ITextual representation of Heap objects, used in the graph visualization. ;Make infix names prefix <4Determine whether a name is an infix name, based on  http:www.haskell.org onlinereport haskell2010/haskellch2.html 345=>?@AB67CDE8FGHIJKLMNOPQ:;<4568:345=>?@AB67CDE8FGHIJKLMNOPQ:;<dennis@felsin9.deNoneR+Communication channel to the visualization S-Whether a visualization is currently running T$Internal state of the visualization UAll the visualized boxes V+Evaluate an object identified by a String. RSTUVWRSTUVRSTUVWdennis@felsin9.deNoneX?Draw visualization to screen, called on every update or when it's ' requested from outside the program. Y(Export the visualization to an SVG file Z2Handle 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. &]^_`abcdefghijklmnopXYqrZ[\stuvwxyz{|}XYZ[\"]^_`abcdefghijklmnopXYqrZ[\stuvwxyz{|}dennis@felsin9.deNone~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.deNone?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.   Safe-Inferred  dennis@felsin9.deNoneThis is the main function. It'(s to be called from GHCi and launches a % graphical window in a new thread. HA minimalistic version of ghc-vis, without window decorations, help and  all that other stuff. 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. GExport the current visualization view to a file, format depends on the 7 file ending. Currently supported: svg, png, pdf, ps        !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^2345_`abcdefghijklmnopqrstuvwxyz{|}~f2345abdqr ghc-vis-0.6.1GHC.Vis GHC.Vis.TypesGHC.Vis.InternalGHC.Vis.View.CommonGHC.Vis.View.ListGHC.Vis.View.Graph.ParserGHC.Vis.View.Graph Paths_ghc_visvismvisviewevalswitchupdateclearexport VisObject PrintStatePStateHeapMap HeapEntryStatemousePos zoomRatiopositiondragging wasDraggedViewTypeViewSignal ExportSignal SwitchSignal ClearSignal UpdateSignal NewSignal DrawFunctionPointFunctionThunkLinkNamedUnnamedtCounterfCounterbCounterheapMapheapMap' GraphViewListViewredrawclickmove updateObjects exportView$fShowVisObjectmaxHeapWalkDepth parseBoxesparseBoxesHeapwalkHeapwalkHeapSimplypointersToFollow2ghc-heap-view-0.4.2.0 GHC.HeapView BCOClosure showClosureinfixFixisInfixgeneralParseBoxeslookupTsimplify parseClosure correctObject insertObjectswalkHeapWithBCOwalkHeapGeneralpointersToFollowinsertadjustsetName setVisitedgetName getSetNamecountReferences parseInternal contParse bcoContParsemutArrContParsembParens visSignal visRunningvisStatevisBoxesevaluateprintAllRGBobjectsboundshover Rectanglestatelayout'fontNamefontSize colorNamecolorNameHighlighted colorLinkcolorLinkHighlighted colorThunkcolorThunkHighlighted colorFunctioncolorFunctionHighlightedpaddingdrawrender drawEntrydrawBox pangoLayoutpangoEmptyLayoutdrawFunctionLinksetColorfillAndSurround roundedRectheightwidth simpleWidth xDotParse graphFontSize nodeFontSize edgeFontSize foldlMaybegetBoxestoViewableGraph defaultVisboxes operations totalSize evaluate2catchIOversionbindirlibdirdatadir libexecdir getBinDir getLibDir getDataDir getLibexecDirgetDataFileNameviewstitlebackgroundColor defaultSize zoomIncrementpositionIncrementbigPositionIncrement signalTimeoutexport'putmVisMainThreadsetupGUIquitreact runCorrect zoomImage visMainThreadfileSave newFilterrenderSVGScaled