!"#$%&'()*+,-./0123456789:;<=> ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~            / Safe-Inferred+F Simulation state!The iteration number we're up to.6Whether the animation is free-running (or single step)@Signals to callbackIdle to take a single step of the automation.:Signals to callbackIdle to roll-back to the initial world.>How many simulation setps to take for each second of real time6How many seconds worth of simulation we've done so far1Record how many steps we've been taking per frameInitial control state  None+F-Dump internal state of the OpenGL framebuffer-Dump internal state of the fragment renderer. Safe-Inferred+F Animation State!Whether the animation is running.0How many times we've entered the animation loop.1Whether this is the first frame of the animation.1Number of msec the animation has been running forDThe time when we entered the display callback for the current frame. xClamp the minimum time between frames to this value (in seconds) Setting this to < 10ms probably isn't worthwhile.!BThe time when the last call to the users render function finished."JThe time when displayInWindow last finished (after sleeping to clamp fps).##How long it took to draw this frame $% !"#& $% !"#& $% !"#&None+F!Abstract 32-bit RGBA bitmap data.'6Generates the point path to display the bitmap centred({Destructively reverse the byte order in an array. This is necessary as OpenGL reads pixel data as ABGR, rather than RGBA)2Destructively reverses the byte order in an array.*AFrees the allocated memory given to OpenGL to avoid a memory leak+AThese functions work as bit masks to isolate the Word8 components ,'()*+-./0,'(* ,'()*+-./0 Safe-Inferred+F&Represents a Quadrant in the 2D plane. South East South West North East North West!A list of all quadrants. Same as  [NW .. SE]. Safe-Inferred+24F;A point on the x-y plane. Points can also be treated as Vectors, so Graphics.Gloss.Data.Vector may also be useful.Test whether a point lies within a rectangular box that is oriented on the x-y plane. The points P1-P2 are opposing points of the box, but need not be in a particular order. S P2 +-------+ | | | + P0 | | | +-------+ P1 1Pretend a point is a number. Vectors aren't real numbes according to Haskell, because they don't support the multiply and divide field operators. We can pretend they are though, and use the (+) and (-) operators as component-wise addition and subtraction.11 Safe-Inferred+F Convert degrees to radians Convert radians to degrees 3Normalise an angle to be between 0 and 2*pi radians     Safe-Inferred+2F 2A vector can be treated as a point, and vis-versa. The magnitude of a vector.5The angle of this vector, relative to the +ve x-axis.The dot product of two vectors.The determinant of two vectors.Multiply a vector by a scalar.IRotate a vector by an angle (in radians). +ve angle is counter-clockwise.9Compute the inner angle (in radians) between two vectors./Normalise a vector, so it has a magnitude of 1.eProduce a unit vector at a given angle relative to the +ve x-axis. The provided angle is in radians.     Safe-Inferred+F LCheck if line segment (P1-P2) clears a box (P3-P4) by being well outside it.(Given an infinite line which intersects P1 and P14, return the point on that line that is closest to P3jGiven an infinite line which intersects P1 and P2, let P4 be the point on the line that is closest to P3.FReturn an indication of where on the line P4 is relative to P1 and P2. a if P4 == P1 then 0 if P4 == P2 then 1 if P4 is halfway between P1 and P2 then 0.5 M | P1 | P4 +---- P3 | P2 | Given four points specifying two lines, get the point where the two lines cross, if any. Note that the lines extend off to infinity, so the intersection point might not line between either of the two pairs of points. N \ / P1 P4 \ / + / \ P3 P2 / \ Get the point where a segment P1-P2 crosses an infinite line P3-P4 , if any.@Get the point where a segment crosses a horizontal line, if any. a + P1 / -------+--------- / y0 P2 + >Get the point where a segment crosses a vertical line, if any. u | | + P1 | / + / | P2 + | | x0 Get the point where a segment P1-P2 crosses another segement P3-P4 , if any.>Check if an arbitrary segment intersects a horizontal segment. a + P2 / (xa, y3) +---+----+ (xb, y3) / P1 + <Check if an arbitrary segment intersects a vertical segment.  (x3, yb) + | + P1 | / + / | P2 + | + (x3, ya) P1 First point of segment. P2 Second point of segment.P3 Lower left point of box.P4 Upper right point of box.P1P2P3/the point on the line P1-P2 that is closest to P3P1P2P3P1P2P3P4P1P2P3P4P1 First point of segment.P2 Second point of segment.y value of line.P1 First point of segment.P2 Second point of segment.x value of line.P1P2P3P4P1 First point of segment.P2 Second point of segment.#(y3) y value of horizontal segment.,(xa) Leftmost x value of horizontal segment.-(xb) Rightmost x value of horizontal segment.$(x3, y3) Intersection point, if any.P1 First point of segment.P2 Second point of segment. (x3) x value of vertical segment((ya) Lowest y value of vertical segment.)(yb) Highest y value of vertical segment.$(x3, y3) Intersection point, if any.    Safe-Inferred+F An integral coordinate.!yA rectangular area of the 2D plane. We keep the type abstract to ensure that invalid extents cannot be constructed."MConstruct an extent. The north value must be > south, and east > west, else 2.#&Take the NSEW components of an extent.$ A square extent of a given size.%&Get the width and height of an extent.&<Check if an extent is a square with a width and height of 1.'1Check whether a coordinate lies inside an extent.(,Check whether a point lies inside an extent.)8Get the coordinate that lies at the center of an extent.*"Cut one quadrant out of an extent.+6Get the quadrant that this coordinate lies in, if any.,8Constuct a path to a particular coordinate in an extent.-If a line segment (P1-P2) intersects the outer edge of an extent then return the intersection point, that is closest to P1, if any. If P1 is inside the extent then 3.  P2 / ----/- | / | + | /------ / P1 .hCheck whether a line segment's endpoints are inside an extent, or if it intersects with the boundary. !4" y max (north) y min (south) x max (east) x min (west)#$%&'()*+,-. !"#$%&'()*+,-.! "#$%&'()*+,-. !4"#$%&'()*+,-. Safe-Inferred+FHM/The quad tree structure.0A node with four children.1A leaf containint some value.2An empty node.3A 2 tree.4 A node with 2. for all its branches.5LGet a quadrant from a node. If the tree does not have an outer node then 3.6sApply a function to a quadrant of a node. If the tree does not have an outer node then return the original tree.7dInsert a value into the tree at the position given by a path. If the path intersects an existing 1 then return the original tree.8{Insert a value into the node containing this coordinate. The node is created at maximum depth, corresponding to an unit !.9$Lookup a node based on a path to it.:+Lookup an element based given a path to it.;=Lookup a node if a tree given a coordinate which it contains.<IFlatten a QuadTree into a list of its contained values, with coordinates.=IFlatten a QuadTree into a list of its contained values, with coordinates./0123456789:;"Extent that covers the whole tree.$Coordinate of the value of interest.<"Extent that covers the whole tree.="Extent that covers the whole tree./0123456789:;<=/2103456789:;<= /2103456789:;<= Safe-Inferred+F   Safe-Inferred+F>.Describes how Gloss should display its output.?:Display full screen with a drawing area of the given size.@;Display in a window with the given name, size and position.>?@>?@>@?>@? Safe-Inferred+FHM5$Arguments: (Width,Height) in pixels.6 No arguments.7!Arguments: (PosX,PosY) in pixels.8UArguments: KeyType, Key Up / Down, Ctrl / Alt / Shift pressed, latest mouse location.9"Display callback has no arguments.:DThe functions every backend window managed backend needs to support.The Backend module interfaces with the window manager, and handles opening and closing the window, and managing key events etc.It doesn't know anything about drawing lines or setting colors. When we get a display callback, Gloss will perform OpenGL actions, and the backend needs to have OpenGL in a state where it's able to accept them.;Initialize the state used by the backend. If you don't use any state, make a Unit-like type; see the GLUT backend for an example.<Perform any initialization that needs to happen before opening a window The Boolean flag indicates if any debug information should be printed to the terminal=3Perform any deinitialization and close the backend.>*Open a window with the given display mode.?3Dump information about the backend to the terminal.@Install the display callbacks.A"Install the window close callback.BInstall the reshape callbacks.C%Install the keymouse press callbacks.D#Install the mouse motion callbacks.EInstall the idle callbacks.FThe mainloop of the backend.G6A function that signals that screen has to be updated.H=Function that returns (width,height) of the window in pixels.IUFunction that reports the time elapsed since the application started. (in seconds)J3Function that puts the current thread to sleep for n seconds.rABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~KLMNOP56789:;<=>?@ABCDEFGHIJu>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~KLMNOP56789:;<=>?@ABCDEFGHIJ ABCDEFB~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGKPONML56789:;<=>?@ABCDEFGHIJ Safe-Inferred+F KLMNOP56789 Safe-Inferred+FHMQRQQRNone+FS]We don't maintain any state information for the GLUT backend, so this data type is empty.T-Convert GLUTs key codes to our internal ones.U.Convert GLUTs key states to our internal ones.V.Convert GLUTs key states to our internal ones.SWXYZ[\]^_`abcdeTUVfSSWXYZ[\]^_`abcdeTUVfNone+Fgw>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~KLMNOP56789:;<=>?@ABCDEFGHIJSggNone+FHMPossible input events.hijhihij None+FHMkQHandles animation timing details. Call this function at the start of each frame.lOHandles animation timing details. Call this function at the end of each frame.klmklklm!None+FnRCallback to handle keyboard and mouse button events for controlling the viewport.nonono"None+FpThe OpenGL library doesn't seem to provide a nice way convert a Float to a GLfloat, even though they're the same thing under the covers. MUsing realToFrac is too slow, as it doesn't get fused in at least GHC 6.12.1q!Used for similar reasons to abover6Perform a rendering action setting up the coords firstpqrpqrpqr#None+;FsDecide how many line segments to use to render the circle. The number of segments we should use to get a nice picture depends on the size of the circle on the screen, not its intrinsic radius. If the viewport has been zoomed-in then we need to use more segments.t(Render a circle with the given thicknessuRender a circle as a line.v:Render a circle with a given thickness as a triangle stripw'Render an arc with the given thickness.xRender an arc as a line.y8Render an arc with a given thickness as a triangle strip stuvwxyz{|}tw stuvwxyz{|}  Safe-Inferred+FAn abstract color value. We keep the type abstract so we can be sure that the components are in the required range. To make a custom color use .~BHolds the color components. All components lie in the range [0..1.EMake a custom color. All components are clamped to the range [0..1].XMake a custom color. You promise that all components are clamped to the range [0..1]FMake a custom color. All components are clamped to the range [0..255].$Take the RGBA components of a color.YMake a custom color. Components should be in the range [0..1] but this is not checked.4Clamp components of a color into the required range.<Normalise a color to the value of its largest RGB component.%Mix two colors with the given ratios.Add RGB components of a color component-wise, then normalise them to the highest resulting one. The alpha components are averaged.8Make a dimmer version of a color, scaling towards black.:Make a brighter version of a color, scaling towards white.Lighten a color, adding white.Darken a color, adding black. A greyness of a given magnitude.~Red component.Green component.Blue component.Alpha component.Red component.Green component.Blue component.Alpha component.Red component.Green component.Blue component.Alpha component.Ratio of first color.Ratio of second color. First color. Second color.Resulting color.!Range is 0 = black, to 1 = white.~$None+F5Convert one of our Colors to OpenGL's representation.%None+FEOpen a window and use the supplied callbacks to handle window events.Color to use when clearing.Callbacks to useNone+F, A 2D picture'A picture consisting of several others..A picture scaled by the given x and y factors.<A picture rotated clockwise by the given angle (in degrees).6A picture translated by the given x and y coordinates. A picture drawn with this color.HA bitmap image with a width, height and some 32-bit RGBA bitmap data.The boolean flag controls whether Gloss should cache the data between frames for speed. If you are programatically generating the image for each frame then use /. If you have loaded it from a file then use .%Some text to draw with a vector font.A circular arc drawn counter-clockwise between two angles (in degrees), with the given radius and thickness. If the thickness is 0 then this is equivalent to .^A circular arc drawn counter-clockwise between two angles (in degrees) at the given radius.bA circle with the given thickness and radius. If the thickness is 0 then this is equivalent to .A circle with the given radius.A line along an arbitrary path.+A convex polygon filled with a solid color.$A blank picture, with nothing in it.A path through the x-y plane.$A blank picture, with nothing in it.+A convex polygon filled with a solid color.A line along an arbitrary path.A circle with the given radius.bA circle with the given thickness and radius. If the thickness is 0 then this is equivalent to ._A circular arc drawn counter-clockwise between two angles (in degrees) at the given radius.A circular arc drawn counter-clockwise between two angles (in degrees), with the given radius and thickness. If the thickness is 0 then this is equivalent to .%Some text to draw with a vector font.YA bitmap image with a width, height and a Vector holding the 32-bit RGBA bitmap data.The boolean flag controls whether Gloss should cache the data between frames for speed. If you are programatically generating the image for each frame then use 1. If you have loaded it from a file then use . A picture drawn with this color.6A picture translated by the given x and y coordinates.<A picture rotated clockwise by the given angle (in degrees)..A picture scaled by the given x and y factors.'A picture consisting of several others. O(1). Use a = of RGBA data as a bitmap with the given width and height.O(size). Copy a ? of RGBA data into a bitmap with the given width and height.The boolean flag controls whether Gloss should cache the data between frames for speed. If you are programatically generating the image for each frame then use 0. If you have loaded it from a file then use .O(size). Copy a  file into a bitmap.;Load an uncompressed 24 or 32bit RGBA BMP file as a bitmap.A closed loop along a path.%A solid circle with the given radius.LA solid arc, drawn counter-clockwise between two angles at the given radius.A wireframe sector of a circle. An arc is draw counter-clockwise from the first to the second angle at the given radius. Lines are drawn from the origin to the ends of the arc.9A path representing a rectangle centered about the origin0A wireframe rectangle centered about the origin.9A wireframe rectangle in the y > 0 half of the x-y plane.CA path representing a rectangle in the y > 0 half of the x-y plane.,A solid rectangle centered about the origin.5A solid rectangle in the y > 0 half of the x-y plane.-width of rectangleheight of rectangle/ /  None+FThe  represents the global transformation applied to the displayed picture. When the user pans, zooms, or rotates the display then this changes the .Global translation.Global rotation (in degrees).-Global scaling (of both x and y coordinates)."The initial state of the viewport.:Translates, rotates, and scales an image according to the .5Takes a point using screen coordinates, and uses the A to convert it to Picture coordinates. This is the inverse of  for points. None+F[State for controlling the viewport. These are used by the viewport control component.The command list for the viewport controller. These can be safely overwridden at any time by deleting or adding entries to the list. Entries at the front of the list take precedence.@How much to scale the world by for each step of the mouse wheel.CHow many degrees to rotate the world by for each pixel of x motion.MDuring viewport translation, where the mouse was clicked on the window.KDuring viewport rotation, where the mouse was clicked on the window-The commands suported by the view controller.\The default commands. Left click pans, wheel zooms, right click rotates, "r" key resets.ECheck if the provided key combination is some gloss viewport command.ECheck if the provided key combination is some gloss viewport command.The initial view state.-Initial view state, with user defined config.Apply an event to a .Like , but returns 3 if no update was needed. Zoom in a  by the scale step. Zoom out a  by the scale step.Offset a viewport.Apply a translation to the .Apply a rotation to the .!!! &None+FHMICallback to handle keyboard and mouse button events for controlling the .'None+FHMRCallback to handle keyboard and mouse button events for controlling the viewport.(None+FHMrThe graphics library calls back on this function when it's finished drawing and it's time to do some computation.the simulation statethe animation stateaaction to get the . We don't use an 0 directly because sometimes we hold a ref to a % (in Game) and sometimes a ref to a  ViewState.the current worldthe initial worldfn to advance the world7how much time to advance world by in single step modeNone+FHMThe quadtree contains cells of unit extent (NetHack style). Given a line segement (P1-P2) through the tree, get the cell closest to P1 that intersects the segment, if any.ETODO: This currently uses a naive algorithm. It just calls  and sorts the results to get the one closest to P1. It'd be better to do a proper walk over the tree in the direction of the ray.The quadtree contains cells of unit extent (NetHack style). Given a line segment (P1-P2) through the tree, return the list of cells that intersect the segment.(P1) Starting point of seg.(P2) Final point of seg. Extent convering the whole tree. The tree.;Intersection point, extent of cell, value of cell (if any).(P1) Starting point of seg.(P2) Final point of seg.Extent covering the whole tree. The tree.2Intersection point, extent of cell, value of cell.)None+F$A texture that we've sent to OpenGL.Stable name derived from the  that the user gives us.Width of the image, in pixels.Height of the image, in pixels. Pointer to the Raw texture data.The OpenGL texture object.FWhether we want to leave this in OpenGL texture memory between frames.Render options settingsWhether to use color$Whether to force wireframe mode onlyWhether to use alpha blendingWhether to use line smoothing,Cache of Textures that we've sent to OpenGL.Default render options*None+234FM=Render a picture using the given render options and viewport.Load a texture. If we've seen it before then use the pre-installed one from the texture cache, otherwise load it into OpenGL.Install a texture into OpenGL."If this texture does not have its cacheMe= flag set then delete it from OpenGL and free the memory.Turn alpha blending on or offTurn line smoothing on or off The render stateThe current viewport.The picture to render. +None+FInitial state of the backend.Display config.Background color.The picture to draw.None+F0Open a new window and display the given picture.3Use the following commands once the window is open:Quit - esc-key.,Move Viewport - left-click drag, arrow keys.NRotate Viewport - right-click drag, control-left-click drag, or home/end-keys.2Zoom Viewport - mouse wheel, or page up/down-keys. Display mode.Background color.The picture to draw.N >?@,None+FInitial State of the backend/Whether to allow the image to be panned around. Display mode.Background color.qFunction to produce the next frame of animation. It is passed the time in seconds since the program started.None+F2Open a new window and display the given animation.>Once the window is open you can use the same commands as with display. Display mode.Background color.sFunction to produce the next frame of animation. It is passed the time in seconds since the program started.N >?@None+F2Open a new window and display the given animation.>Once the window is open you can use the same commands as with display. Like 1 but don't allow the display to be panned around. Display mode.Background color.sFunction to produce the next frame of animation. It is passed the time in seconds since the program started.  Display mode.Background color.sFunction to produce the next frame of animation. It is passed the time in seconds since the program started.O >?@   -None+FHMInitial state of the backend Display mode.Background color.@Number of simulation steps to take for each second of real time.The initial model.-A function to convert the model to a picture.A function to step the model one iteration. It is passed the current viewport and the amount of time for this simulation step (in seconds).None+FHM Run a finite-time-step simulation in a window. You decide how the model is represented, how to convert the model to a picture, and how to advance the model for each unit of time. This function does the rest.>Once the window is open you can use the same commands as with display.  Display mode.Background color.@Number of simulation steps to take for each second of real time.The initial model.-A function to convert the model to a picture.A function to step the model one iteration. It is passed the current viewport and the amount of time for this simulation step (in seconds).S >?@   None+FHM  Display mode.Background color.@Number of simulation steps to take for each second of real time.The initial model.-A function to convert the model to a picture.A function to step the model one iteration. It is passed the current viewport and the amount of time for this simulation step (in seconds).S >?@   .None+FHMCallback for KeyMouse events.Callback for Motion events."Callback for Handle reshape event. Initial state of the backend Display mode.Background color.@Number of simulation steps to take for each second of real time.The initial world.-A function to convert the world to a picture."A function to handle input events.sA function to step the world one iteration. It is passed the period of time (in seconds) needing to be advanced.(Whether to use the callback_exit or not.ref to world statefn to handle input eventsref to world statefn to handle input events None+FM Play a game in a window.   Display mode.Background color.@Number of simulation steps to take for each second of real time.The initial world.*A function to convert the world a picture."A function to handle input events.sA function to step the world one iteration. It is passed the period of time (in seconds) needing to be advanced. >?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ [ F~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGABCDE None+FM APlay a game in a window, using IO actions to build the pictures.   Display mode.Background color.@Number of simulation steps to take for each second of real time.The initial world.)An action to convert the world a picture."A function to handle input events.sA function to step the world one iteration. It is passed the period of time (in seconds) needing to be advanced. >?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ [ F~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGABCDE /None+FQ >?@  >@?  0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklm n o pqqrstuvwxyz{|}~u                            ! " # $ % & ' ( ) * + , -./012345 6789:;<=>?@8AB8CDEFGHIJK8L@MNOPQ0RSTUVWXYWZ[Q\]^_`abcdefghijklmnopqrstuvnwxyz{|y}~   !!"""###########    $%W       &&''(W((((())))))))8))))))@))8**********+,,-....... gloss-1.8.2.1Graphics.Gloss.Data.PictureGraphics.Gloss.Data.QuadGraphics.Gloss.Data.PointGraphics.Gloss.Geometry.AngleGraphics.Gloss.Data.VectorGraphics.Gloss.Geometry.LineGraphics.Gloss.Data.ExtentGraphics.Gloss.Data.QuadTreeGraphics.Gloss.Data.Display"Graphics.Gloss.Interface.Pure.GameGraphics.Gloss.Data.ColorGraphics.Gloss.Data.ViewPortGraphics.Gloss.Data.ViewState!Graphics.Gloss.Algorithms.RayCast%Graphics.Gloss.Interface.Pure.Display%Graphics.Gloss.Interface.Pure.Animate#Graphics.Gloss.Interface.IO.Animate&Graphics.Gloss.Interface.Pure.Simulate$Graphics.Gloss.Interface.IO.Simulate Graphics.Gloss.Interface.IO.Game1Graphics.Gloss.Internals.Interface.Simulate.State(Graphics.Gloss.Internals.Interface.Debug0Graphics.Gloss.Internals.Interface.Animate.State&Graphics.Gloss.Internals.Render.BitmapGraphics.Gloss.Geometry0Graphics.Gloss.Internals.Interface.Backend.Types+Graphics.Gloss.Internals.Interface.Callback.Graphics.Gloss.Internals.Interface.Common.Exit/Graphics.Gloss.Internals.Interface.Backend.GLUT*Graphics.Gloss.Internals.Interface.Backend(Graphics.Gloss.Internals.Interface.Event1Graphics.Gloss.Internals.Interface.Animate.Timing4Graphics.Gloss.Internals.Interface.ViewState.Reshape&Graphics.Gloss.Internals.Render.Common&Graphics.Gloss.Internals.Render.CircleGraphics.Gloss.Internals.Color)Graphics.Gloss.Internals.Interface.Window5Graphics.Gloss.Internals.Interface.ViewState.KeyMouse3Graphics.Gloss.Internals.Interface.ViewState.Motion0Graphics.Gloss.Internals.Interface.Simulate.Idle%Graphics.Gloss.Internals.Render.State'Graphics.Gloss.Internals.Render.Picture*Graphics.Gloss.Internals.Interface.Display*Graphics.Gloss.Internals.Interface.Animate+Graphics.Gloss.Internals.Interface.Simulate'Graphics.Gloss.Internals.Interface.GameGraphics.Gloss BitmapDataQuadSESWNENWallQuadsPoint pointInBoxdegToRadradToDegnormaliseAngleVectormagVargVdotVdetVmulSVrotateVangleVV normaliseVunitVectorAtAngle segClearsBoxclosestPointOnLineclosestPointOnLineParamintersectLineLineintersectSegLineintersectSegHorzLineintersectSegVertLineintersectSegSegintersectSegHorzSegintersectSegVertSegCoordExtent makeExtent takeExtent squareExtent sizeOfExtent isUnitExtent coordInExtent pointInExtentcenterCoordOfExtentcutQuadOfExtent quadOfCoord pathToCoordintersectSegExtenttouchesSegExtentQuadTreeTNodeTLeafTNil emptyTree emptyNodetakeQuadOfTree liftToQuad insertByPath insertByCoordlookupNodeByPath lookupByPath lookupByCoordflattenQuadTreeflattenQuadTreeWithExtentsDisplay FullScreenInWindow Modifiersshiftctrlalt SpecialKey KeyPadEnter KeyPadEqual KeyPadDecimal KeyPadAddKeyPadSubtractKeyPadMultiply KeyPadDivideKeyPad9KeyPad8KeyPad7KeyPad6KeyPad5KeyPad4KeyPad3KeyPad2KeyPad1KeyPad0KeyAltRKeyAltLKeyCtrlRKeyCtrlL KeyShiftR KeyShiftLKeyEndKeyHome KeyPageDown KeyPageUp KeyDeleteKeyBegin KeyNumLock KeyInsert KeyBackspaceKeyEnterKeyTabKeyRightKeyLeftKeyDownKeyUpKeyF25KeyF24KeyF23KeyF22KeyF21KeyF20KeyF19KeyF18KeyF17KeyF16KeyF15KeyF14KeyF13KeyF12KeyF11KeyF10KeyF9KeyF8KeyF7KeyF6KeyF5KeyF4KeyF3KeyF2KeyF1KeyEscKeySpace KeyUnknownKeyStateUpDown MouseButtonAdditionalButton WheelDownWheelUp RightButton MiddleButton LeftButtonKeyCharEvent EventResize EventMotionEventKeyColor makeColor makeColor' makeColor8 rgbaOfColorrawColor mixColors addColorsdimbrightlightdarkgreyNblackwhiteredgreenblueyellowcyanmagentarosevioletazure aquamarine chartreuseorangePicturePicturesScaleRotate TranslateBitmapTextThickArcArc ThickCircleCircleLinePolygonBlankPathblankpolygonlinecircle thickCirclearcthickArctextbitmapcolor translaterotatescalepicturesbitmapOfForeignPtrbitmapOfByteString bitmapOfBMPloadBMPlineLoop circleSolidarcSolid sectorWire rectanglePath rectangleWirerectangleUpperWirerectangleUpperPathrectangleSolidrectangleUpperSolidViewPortviewPortTranslateviewPortRotate viewPortScale viewPortInitapplyViewPortToPictureinvertViewPort ViewStateviewStateCommandsviewStateScaleStepviewStateRotateFactorviewStateTranslateMarkviewStateRotateMarkviewStateViewPort CommandConfigCommandCBumpCClockwiseCBumpClockwise CBumpDownCBumpUp CBumpRight CBumpLeft CBumpZoomIn CBumpZoomOutCRotate CTranslateCRestoredefaultCommandConfig viewStateInitviewStateInitWithConfigupdateViewStateWithEventupdateViewStateWithEventMaybecastSegIntoCellularQuadTreetraceSegIntoCellularQuadTreedisplayanimate animateIOanimateFixedIOsimulate simulateIOplayplayIOStatestateIterationstateRun stateStep stateResetstateResolution stateSimTimestateStepsPerFrame stateInitdumpFramebufferStatedumpFragmentState stateAnimatestateAnimateCountstateAnimateStartstateAnimateTimestateDisplayTimestateDisplayTimeClampstateGateTimeStartstateGateTimeEndstateGateTimeElapsedstateDisplayTimeLast bitmapPath reverseRGBAreverseRGBA_ptrfreeBitmapData isolateByte0 isolateByte1 isolateByte2 isolateByte3$fShowBitmapData$fNum(,)baseGHC.Errerror Data.MaybeNothingReshapeCallback IdleCallbackMotionCallbackKeyboardMouseCallbackDisplayCallbackBackendinitBackendStateinitializeBackend exitBackend openWindowdumpBackendStateinstallDisplayCallbackinstallWindowCloseCallbackinstallReshapeCallbackinstallKeyMouseCallbackinstallMotionCallbackinstallIdleCallback runMainLoop postRedisplaygetWindowDimensions elapsedTimesleepCallbackReshapeMotionIdleKeyMouse callback_exit keyMouse_exit GLUTState glutKeyToKeyglutKeyStateToKeyStateglutModifiersToModifiers glutStateInitinitializeGLUTopenWindowGLUT dumpStateGLUTinstallDisplayCallbackGLUTcallbackDisplayinstallReshapeCallbackGLUTcallbackReshapeinstallKeyMouseCallbackGLUTcallbackKeyMouseinstallMotionCallbackGLUTcallbackMotioninstallIdleCallbackGLUT callbackIdle$fBackendGLUTStatedefaultBackendState keyMouseEvent motionEvent convertPoint animateBegin animateEnd getsIORefcallback_viewState_reshapeviewState_reshapegfgsizei renderAction circleSteps renderCirclerenderCircleLinerenderCircleStrip renderArc renderArcLinerenderArcStriprenderCircleLine_steprenderCircleStrip_stepaddPointaddPointOnCircleRGBA clampColornormaliseColor $fNumColorglColor4OfColor createWindowghc-prim GHC.TypesFalseTrueGHC.ForeignPtr ForeignPtrbytestring-0.10.4.0Data.ByteString.Internal ByteString bmp-1.2.5.2Codec.BMP.BaseBMP$fMonoidPicture isCommand isCommand2 controlZoomIncontrolZoomOut motionBumpmotionTranslate motionRotatecallback_viewState_keyMouseviewState_keyMousecallback_viewState_motionviewState_motioncallback_simulate_idle GHC.IORefIORefsimulate_reset simulate_run simulate_stepuntilMcompareDistanceTodistanceTexturetexNametexWidth texHeighttexData texObject texCacheMe stateColorstateWireframestateBlendAlphastateLineSmooth stateTextures renderPicture loadTextureinstallTexture freeTexture setBlendAlpha setLineSmooth drawPicture checkErrors handleError vertexPFsdisplayWithBackendanimateWithBackendIOsimulateWithBackendIOcallback_keyMousecallback_motioncallback_reshapeplayWithBackendIOhandle_keyMouse handle_motionhandle_reshape