úÎ}¢cèÄ      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃ,SafeSafeSafe0Converts ints to floats.1Converts floats to ints.010101SafeSafeSafeSafe Safe01 Safe2Time duration in seconds.ÄÅÆÇ2ÈÉÄÅÆÇ2ÈÉÄÅÆÇ2ÈÉ None ÊËÌÍÎÏÐÑÒÓÔÕ ÊËÌÍÎÏÐÑÒÓÊËÌÍÎÏÐÑÒÓÔÕ NoneÖרÙÚÛÜרÙÚÛÖרÙÚÛÜ None33Parameters for perlin noise. See docs for function  noiseDetail. 3456ÝÞßàáâãä 3456ÝÞßàáâ3456ÝÞßàáâãäNone7…Color datatype. It contains values for three components of the color and transparency. All values range in the interval from 0 to 1. 78åæçèéêëìí>îï ðñò$#"! ('%&/.-,+*)78åæçéêëì 78åæçèéêëìíNoneóôõö÷øùúðñò$#"! ('%&/.-,+*)óôõö÷øóôõö÷øùúNone9*Modes for drawing of rectangle or ellipse.>$Modes for drawing of rectangle. See rectMode.?"Modes for drawing of ellipse. See  ellipseMode.ûüýþÿ9:;<=>?     ûüýþÿ9:;<=>?    ûüýþÿ9:;<=>?     NoneQðñò$#"! ('%&/.-,+*)ÄÅÆÇ2ÈÉÊËÌÍÎÏÐÑÒÓרÙÚÛ3456ÝÞßàáâóôõö÷øûüýþÿ9:;<=>?   None2I@{Processing IO-monad. It has the same meaning as the Haskell IO-monad but it's augmented with Processing library functions. We can use liftIOI to execute ordinary Haskell IO-actions. The Pio has instance for class MonadIO. "text <- liftIO $ readFile filename@ !"#$%&'@ !"#$%@ !"#$%&'NoneA 3D vector.B 2D vector.AB()*+,-./0123456789:;<=>?ABABNoneC¿The system variable frameCount contains the number of frames that have been displayed since the program started. Inside setup() the value is 0, after the first iteration of draw it is 1, etc.processing docs: 0https://processing.org/reference/frameCount.html@ABCDEFGHIJKLMNOPQRSTUVCWXYZ[\aðñò$#"! ('%&/.-,+*)2ÈÊËÌÍ3456Ýûüýþÿ9:;<=>?   @@ABCDEFGHIJKLMNOPQRSTUVCWXYZ[\@ABCDEFGHIJKLMNOPQRSTUVCWXYZ[\NoneDgDatatyp for mutable variables. We can create a reference and then manipulate the value with functions  readPioRef and  writePioRef). The API is the same as in the case of IORef6s. It's standard way to work with mutables in haskell.EcCreates a reference for a mutable value. The argument is an initial value assigned to the variable.F#Reads the value from the reference.GWrites the value to reference.H5Modifies a value iside the reference with a function.D]^EFGHDEFGHD]^EFGHNone:I˜It holds all processing standard callbacks. With it we can set the setup, draw, and update functions. Here we can specify how to react on user-input.ÿcAll functions update the program state. They take it in as an argument and produce as result. In Haskell we can not manipulate global variables with such ease as Processing provides. So we have to find out another way to update the state. The natural way for Haskell is to keep the things as explicit as possible. That leads to the following decisions:setup returns the initial state.draw- takes the state as an argument and draws it.updateA should take in the current state and return back the next state.YAll input processing functions also manipulate the state explicitly by passing arguments.¤Notice that the processing function draw is split on two functions: draw and update. The draw is only for drawing the program state and update is for state update.¦There is a useful function procUpdateTime that provides a time interval that has passed since the previous update of the state. It can be useful for physics engines.W#An alias for processing procedures.X4A alias for value update inside processing IO-monad.YmThe main function for rendering processing actions. It sets the scene and starts the rendering of animation._`abIJKLMNOPQRSTUVWXcdeYfghi2IJKLMNOPQRSTUVWXY _`abI JKLMNOPQRSTUVWXcdeYfghiNoneÿjklmnopqrstuvwxyzîï ðñò$#"! ('%&/.-,+*){|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´()*+,-./0123456789:;<=>?2ÈÊËÌÍ3456Ý78åæçéêëìûüýþÿ9:;<=>?   @AB@ABCDEFGHIJKLMNOPQRSTUVCWXYZ[\DEFGHIJKLMNOPQRSTUVWXYNone Z3Return the pair of width and height as a 2D vector.[oSystem variable that stores the width of the display window. This value is set by the first parameter of the size(), function. For example, the function call size(320, 240)U sets the width variable to the value 320. The value of width defaults to 100 if size() is not used in a program.processing docs: +https://processing.org/reference/width.html\qSystem variable that stores the height of the display window. This value is set by the second parameter of the  winSize(), function. For example, the function call winSize(320, 240)W sets the height variable to the value 240. The value of height defaults to 100 if  winSize() is not used in a program. processing docs: ,https://processing.org/reference/height.html]ÃDefines the dimension of the display window width and height in units of pixels. In a program that has the setup() function, the size() function must be the first line of code inside setup().processing docs: +https://processing.org/reference/size_.html^XDraws all geometry with smooth (anti-aliased) edges. This behavior is the default, so smooth()Ò only needs to be used when a program needs to set the smoothing in a different way. The level parameter increases the level of smoothness. This is the level of over sampling applied to the graphics buffer.processing docs: -https://processing.org/reference/smooth_.html_ÿ"Draws all geometry and fonts with jagged (aliased) edges and images when hard edges between the pixels when enlarged rather than interpoloating pixels. Note that smooth() is active by default, so it is necessary to call noSmooth() to disable smoothing of geometry, fonts, and images. processing docs: /https://processing.org/reference/noSmooth_.html`ÿgSpecifies the number of frames to be displayed every second. For example, the function call frameRate(30) will attempt to refresh 30 times a second. If the processor is not fast enough to maintain the specified rate, the frame rate will not be achieved. Setting the frame rate within setup() is recommended. The default rate is 60 frames per second. processing docs: 0https://processing.org/reference/frameRate_.htmlaÐExecutes the code within draw() one time. This functions allows the program to update the display window only when necessary, for example when an event registered by mousePressed() or keyPressed() occurs.ÜIn structuring a program, it only makes sense to call redraw() within events such as mousePressed(). This is because redraw() does not run draw() immediately (it only sets a flag that indicates an update is needed). processing docs: -https://processing.org/reference/redraw_.htmlbÒBy default, Processing loops through draw() continuously, executing the code within it. However, the draw() loop may be stopped by calling noLoop(). In that case, the draw() loop can be resumed with loop().processing docs: +https://processing.org/reference/loop_.htmlcÝStops Processing from continuously executing the code within draw(). If loop() is called, the code in draw() begins to run continuously again. If using noLoop() in setup(), it should be the last line inside the block.processing docs: -https://processing.org/reference/noLoop_.html Z[\]^_`abc CZ[\]^_`abc Z[\]^_`abcNone daSpecifies an amount to displace objects within the display window. The x parameter specifies left/right translation, the y parameter specifies updown translationprocessing docs: 0https://processing.org/reference/translate_.htmlµRotates around given 3D vector.ejRotates the amount specified by the angle parameter. Angles must be specified in taus (values from 0 to 1)processing docs: -https://processing.org/reference/rotate_.htmlfRotates around X-axis.gRotates around Y-axis.hRotates around Z-axis.iÿ$Increases or decreases the size of a shape by expanding and contracting vertices. Objects always scale from their relative origin to the coordinate system. Scale values are specified as decimal percentages. For example, the function call scale(2.0) increases the dimension of a shape by 200%.processing docs: ,https://processing.org/reference/scale_.htmljmReplaces the current matrix with the identity matrix. The equivalent function in OpenGL is glLoadIdentity(). processing docs: 2https://processing.org/reference/resetMatrix_.htmlkjApplies local transformation. Substitutes the pair of pushMatrix and popMatrix. It can be used like this: ;local $ do rotate angle translate p1 drawShape paramssee  1https://processing.org/reference/pushMatrix_.html and 0https://processing.org/reference/popMatrix_.htmllðMultiplies the current matrix by the one specified through the parameters. This is very slow because it will try to calculate the inverse of the transform, so avoid it whenever possible. The equivalent function in OpenGL is glMultMatrix(). processing docs:  2https://processing.org/reference/applyMatrix_.html mOShears a shape around the x-axis the amount specified by the angle parameter. Aprocessing docs: -https://processing.org/reference/shearX_.htmlnOShears a shape around the y-axis the amount specified by the angle parameter. Aprocessing docs: -https://processing.org/reference/shearY_.html dµefghijklmn¶ defghijklmn dµefghijklmn¶Noneo=Sets the color used to draw lines and borders around shapes. processing docs:  -https://processing.org/reference/stroke_.html pvDisables drawing the stroke (outline). If both noStroke() and noFill() are called, nothing will be drawn to the screenprocessing docs:  /https://processing.org/reference/noStroke_.html q<Sets the color used to fill shapes. For example, if you run fill (rgb 204 102 0)4, all subsequent shapes will be filled with orange. processing docs:  +https://processing.org/reference/fill_.html rlDisables filling geometry. If both noStroke() and noFill() are called, nothing will be drawn to the screen. processing docs:  -https://processing.org/reference/noFill_.html s'Sets stroke and fill to the same color.tÿnThe background() function sets the color used for the background of the Processing window. The default background is light gray. This function is typically used within draw() to clear the display window at the beginning of each frame, but it can be used inside setup() to set the background on the first frame of animation or if the backgound need only be set once. processing docs:  1https://processing.org/reference/background_.html u"Clears the pixels within a buffer.processing docs:  ,https://processing.org/reference/clear_.html vECreates an RGB-color from three values. The values are from 0 to 255.wKCreates a grey value out of single float value. The value is from 0 to 255.x'Creates an RGB-color with transparency.y(Creates an grey-color with transparency.{ White color.| Black color.} Nave color.~ Blue color. Aqua color.€ Teal color. Olive color.‚ Green color.ƒ Lime color.„ Yellow color.… Orange color† Red color‡ Maroon color.ˆFuchsia color.‰ Purple colorŠ Gray color.‹ Silver color.opqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹opqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹opqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹NoneŒ=Maps values from interval (0, 1) to the points on the circle. onCircle radius center valueCMaps values from interval (0, 1) to the points on the line segment. onLine point1 point2 valueŽ6Rescales the unipolar scale (0, 1) to the given range.ŒŽŒŽŒŽNone :A triangle is a plane created by connecting three points. processing docs: /https://processing.org/reference/triangle_.htmlÿXDraws a rectangle to the screen. A rectangle is a four-sided shape with every angle at ninety degrees. By default, the first two parameters set the location of the upper-left corner, the third sets the width, and the fourth sets the height. The way these parameters are interpreted, however, may be changed with the rectMode() function.processing docs: +https://processing.org/reference/rect_.html‘ÿ8A quad is a quadrilateral, a four sided polygon. It is similar to a rectangle, but the angles between its edges are not constrained to ninety degrees. The first pair of parameters (x1,y1) sets the first vertex and the subsequent pairs should proceed clockwise or counter-clockwise around the defined shape. processing docs: +https://processing.org/reference/quad_.html’Draws a polygon.“DDraws a point, a coordinate in space at the dimension of one pixel. processing docs: ,https://processing.org/reference/point_.html”Draws a sequence of points.•>Draws a line (a direct path between two points) to the screen.processing docs: +https://processing.org/reference/line_.html–.Draws a line-path (sequence of line segments).—ÿDraws an ellipse (oval) to the screen. An ellipse with equal width and height is a circle. By default, the first two parameters set the location, and the third and fourth parameters set the shape's width and height. The origin may be changed with the  ellipseMode() function. processing docs: .https://processing.org/reference/ellipse_.html˜.Draws a circle with a given radius and center. circle radius center·¸‘’“”¹º•–—˜»¼½¾¿ ‘’“”•–—˜·¸‘’“”¹º•–—˜»¼½¾¿None™ÿxDraws a Bezier curve on the screen. These curves are defined by a series of anchor and control points. The first two parameters specify the first anchor point and the last two parameters specify the other anchor point. The middle parameters specify the control points which define the shape of the curve. Bezier curves were developed by French engineer Pierre Bezier. processing docs: -https://processing.org/reference/bezier_.htmlÀ™™À™Noneš~Modifies the location from which ellipses are drawn by changing the way in which parameters given to ellipse() are intepreted.The default mode is ellipseMode Center•, which interprets the first two parameters of ellipse() as the shape's center point, while the third and fourth parameters are its width and height.ellipseMode Radius¨ also uses the first two parameters of ellipse() as the shape's center point, but uses the third and fourth parameters to specify half of the shapes's width and height.ellipseMode Corner˜ interprets the first two parameters of ellipse() as the upper-left corner of the shape, while the third and fourth parameters are its width and height.ellipseMode Cornersº interprets the first two parameters of ellipse() as the location of one corner of the ellipse's bounding box, and the third and fourth parameters as the location of the opposite corner.›}Modifies the location from which rectangles are drawn by changing the way in which parameters given to rect() are intepreted.The default mode is rectMode Cornerœ, which interprets the first two parameters of rect() as the upper-left corner of the shape, while the third and fourth parameters are its width and height.rectMode Corners™ interprets the first two parameters of rect() as the location of one corner, and the third and fourth parameters as the location of the opposite corner.rectMode Center‹ interprets the first two parameters of rect() as the shape's center point, while the third and fourth parameters are its width and height.rectMode Radius¥ also uses the first two parameters of rect() as the shape's center point, but uses the third and fourth parameters to specify half of the shapes's width and height.processing docs: /https://processing.org/reference/rectMode_.htmlœzSets the width of the stroke used for lines, points, and the border around shapes. All widths are set in units of pixels. processing docs: 4https://processing.org/reference/strokeWelight_.htmlš›œ?š›œš›œNone?‘’“”•–—˜™š›œ None.Contains coordinates of the mouse as a vector.ž[The system variable mouseX always contains the current horizontal coordinate of the mouse. processing docs: ,https://processing.org/reference/mouseX.htmlŸYThe system variable mouseX always contains the current vertical coordinate of the mouse. processing docs: ,https://processing.org/reference/mouseY.html Contains relative mouseX: coordinates of the mouse (scaled to the interval [0, 1]).¡Contains relative mouseY: coordinates of the mouse (scaled to the interval [0, 1]).¢7Contains relative coordinates of the mouse as a vector.žŸ ¡¢£žŸ ¡¢£žŸ ¡¢£!None¤Returns last pressed key.processing docs: )https://processing.org/reference/key.html¥"Returns last pressed key modifier.¤¥¤¥¤¥"None¦TThe year() function returns the current year as an integer (2003, 2004, 2005, etc). processing docs: +https://processing.org/reference/year_.html§GThe month() function returns the current month as a value from 1 - 12. processing docs: ,https://processing.org/reference/month_.html¨CThe day() function returns the current day as a value from 1 - 31. processing docs: *https://processing.org/reference/day_.html©Returens univeral hour.ªEThe hour() function returns the current hour as a value from 0 - 23. processing docs: +https://processing.org/reference/hour_.html«IThe minute() function returns the current minute as a value from 0 - 59. processing docs: -https://processing.org/reference/minute_.html¬IThe second() function returns the current second as a value from 0 - 59. processing docs: -https://processing.org/reference/second_.html­£Returns the number of milliseconds (thousandths of a second) since starting the program. This information is often used for timing events and animation sequences. processing docs: -https://processing.org/reference/millis_.html Á¦§¨Â骫¬­¦§¨©ª«¬­ Á¦§¨Â骫¬­#NonežŸ ¡¢£¤¥¦§¨©ª«¬­$None®Prints values on the console.®®®%None®&None'None(None¯ÝSets the seed value for random(). By default, random() produces different results each time the program is run. Set the seed parameter to a constant to return the same pseudo-random numbers each time the software is run. processing docs: 1https://processing.org/reference/randomSeed_.html°ÿdGenerates random numbers. Each time the random() function is called, it returns an unexpected value within the specified range. If only one parameter is passed to the function, it will return a float between zero and the value of the high parameter. For example, random(5) returns values between 0 and 5 (starting at zero, and up to, but not including, 5).processing docs: -https://processing.org/reference/random_.html±/Genrates random numbers within the given range.²ACreates random point within the ranges of the size of the screen.³Creates random color.´'Creates random color with transparency.µÿÍReturns a float from a random series of numbers having a mean of 0 and standard deviation of 1. Each time the randomGaussian() function is called, it returns a number fitting a Gaussian, or normal, distribution. There is theoretically no minimum or maximum value that randomGaussian() might return. Rather, there is just a very low probability that values far from the mean will be returned; and a higher probability that numbers near the mean will be returned.processing docs: 5https://processing.org/reference/randomGaussian_.htmlĉBoxMuller algorythm for creation of Gaussian random values out of two uniform number r1, r2. r1, r2 should belong to the interval [0, 1]¶ÛSets the seed value for noise(). By default, noise() produces different results each time the program is run. Set the seed parameter to a constant to return the same pseudo-random numbers each time the software is run. processing docs: 0https://processing.org/reference/noiseSeed_.html·,Sets the number of octaves for perlin noise.¸ÿMAdjusts the character and level of detail produced by the Perlin noise function. Similar to harmonics in physics, noise is computed over several octaves. Lower octaves contribute more to the output signal and as such define the overal intensity of the noise, whereas higher octaves create finer-grained details in the noise sequence.ÿïBy default, noise is computed over 4 octaves with each octave contributing exactly half than its predecessor, starting at 50% strength for the first octave. This falloff amount can be changed by adding an additional function parameter. For example, a falloff factor of 0.75 means each octave will now have 75% impact (25% less) of the previous lower octave. While any number between 0.0 and 1.0 is valid, note that values greater than 0.5 may result in noise() returning values greater than 1.0.ˆBy changing these parameters, the signal created by the noise() function can be adapted to fit very specific needs and characteristics. processing docs: 2https://processing.org/reference/noiseDetail_.html¹Returns 1D Perlin noise.ºReturns 2D Perlin noise.»Returns 3D Perlin noise.ÅƯ°±²³´µĶ·¸¹º»3456¯°±²³´µ¶·¸¹º»ÅƯ°±²³´µĶ·¸¹º»)None¼Interval for float value (minValue, maxValue). ½Re-maps a number from one range to another. Originally called map in the Processing, but in Haskell this name is already taken.processing docs: *https://processing.org/reference/map_.html¾The  constrian that is defined on vectors.¿>Constrains a value to not exceed a maximum and minimum value. processing docs: 0https://processing.org/reference/constrain_.html¼½¾¿¼½¾¿¼½¾¿*NoneÀConverts degrees to radians.ÁConverts rdians to degrees.Â=Converts angle in taus to unit vector rotated by given angle.ÃThe function e in radians.ÀÁÂÃÀÁÂÃÀÁÂÃ+None3456¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃ,Noner013456?CZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃNoneÿWjklmnopqrstuvwxyzÇÈÉÊ $#"! ('%&/.-,+*){|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´çèéêëìíîïðñòóôõö÷øù()*+,-./0123456789:;<0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄIJKLMNOPQRSTUVY@WX278BAZ[\]^_C`bca01‘—˜•–“”’™?>9:;<=š›œžŸ¢ ¡/.-,+*)£('&% ¤$#"! ¥¦§¨ª«¬­©®defghijklmnqropsvxwyztu{|}~€‚ƒ„…†‡ˆ‰Š‹½¼¿¾ÀÁÂï°±²³´µ3456¸·¶¹º»ŒŽDEFGHú-./-.0-.1-.2-.3-.4-.5-.6-.7-.8-.9-.:-.;-.<-.=-.>-.?-.@-.A-.B-.C-.D-.E-.F-.G-.H-.I-.J-.K-.L-.M-.N-.O-.P-.Q-.R-.R-.S-.N-.T-.U-VW-VX-VY-VZ-V[-V\-VS]^ _ ` ` a bccdefghijklmnopqrsttuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆ Ç È É Ê Ë Ì Í!Î!Ï"Ð"Ñ"Ò"Ó"Ô"Õ"Ö"×$Ø(Ù(Ú(Û(Ü(Ý(Þ(ß(à(á(â(ã(ä(å)æ)ç)è)é*ê*ë*ì*í î î ï ð ñ ò ó ô õ ö ÷ ÷ n Š ø ù ú û ü ý ý þ ÿ               -.-.-. !"#$%&''()*+,-./01233456789k:;<=>?@ABCDEFGHIJKIJLIJMIJNIJOIJPIJQIJRIJSIJTIJUIJVIJWIXYIXZIX[IX\IX]IX^IX_IX`IXaIXaIXbcdefghijklmnopqrstuvwxùyz{|ò}o~€‚ƒ„…†‡ˆ‰Š‹‰Œ‰ŒŽ‰Œ‰Œ‰Œ‘‰Œ’‰Œ“‰Œ”‰Œ•‰Œ–‰Œ—‰Œ˜‰Œ™‰Œš‰›œ‰›‰žŸ‰ž ‰Š¡‰Š¢‰Š£‰Š¤‰Š¥‰Š¦‰Š§‰Š¨‰Š©‰Šª‰Š«‰Š¬‰Š­‰Š®‰›¯‰°±‰°²‰°³‰°´‰°µ‰°¶‰°·‰°¸‰°¸‰°¹‰º»‰º»‰º¼‰½¾‰½¿‰½À‰½Á‰ÂÉÂĉŒÅ‰ŒÆ‰ŒÇ‰ŒÈ‰ŒÉ‰ŒÊ‰ŒË‰ŒÌ‰ŒÍ‰ŒÎ‰ŒÏ‰ŒÐ‰ŒÑ‰ŒÒ‰ŒÓ‰ŒÔ‰ŒÕ‰ŒÖ‰Œ×‰ŒØÙÚÛÙÚÜÝÞßàá¦âãäåæç"è"é"ê(ë(ì(퉌ð‰Œñ‰òó‰òô‰òô‰òõ‰òö‰òö‰ò÷‰òø‰òø‰òù‰òú‰òú‰òû‰òa‰òa‰òb‰òü‰òü‰òý‰òþ‰òþ‰òÿ‰ò‰ò‰ò‰ò‰ò‰òIIIII I I I I IIIIIIIIII5processing-for-haskell-0.1.0.1-HPEbywK5gBZ3IjnVvigoej Graphics.Proc'Graphics.Proc.Lib.Typography.Attributes$Graphics.Proc.Lib.Typography.Display!Graphics.Proc.Lib.Data.ConversionGraphics.Proc.Lib.ImageGraphics.Proc.Lib.CameraGraphics.Proc.Lib.LightsGraphics.Proc.Lib.ControlGraphics.Proc.Lib.Data&Graphics.Proc.Core.State.Elements.Time'Graphics.Proc.Core.State.Elements.Frame&Graphics.Proc.Core.State.Elements.Font%Graphics.Proc.Core.State.Elements.RndGraphics.Proc.Core.GLBridge'Graphics.Proc.Core.State.Elements.Input&Graphics.Proc.Core.State.Elements.Draw!Graphics.Proc.Core.State.ElementsGraphics.Proc.Core.State.PioGraphics.Proc.Core.VectorGraphics.Proc.Core.StateGraphics.Proc.Core.PioRefGraphics.Proc.Core.RunGraphics.Proc.CoreGraphics.Proc.Lib.EnvironmentGraphics.Proc.Lib.TransformGraphics.Proc.Lib.ColorGraphics.Proc.Lib.Misc#Graphics.Proc.Lib.Shape.Primitive2DGraphics.Proc.Lib.Shape.Curve!Graphics.Proc.Lib.Shape.AttributeGraphics.Proc.Lib.ShapeGraphics.Proc.Lib.Input.Mouse Graphics.Proc.Lib.Input.KeyboardGraphics.Proc.Lib.Input.TimeGraphics.Proc.Lib.Input!Graphics.Proc.Lib.Output.TextAreaGraphics.Proc.Lib.Output$Graphics.Proc.Lib.Typography.MetricsGraphics.Proc.Lib.TypographyGraphics.Proc.Lib.Math.Random"Graphics.Proc.Lib.Math.Calculation#Graphics.Proc.Lib.Math.TrigonometryGraphics.Proc.Lib.MathGraphics.Proc.Lib$GLUT-2.7.0.10-KAs0izank2e5RSoliuVnl1!Graphics.UI.GLUT.Callbacks.Window KeyUnknownKeyAltRKeyAltLKeyCtrlRKeyCtrlL KeyShiftR KeyShiftL KeyDeleteKeyBegin KeyNumLock KeyInsertKeyEndKeyHome KeyPageDown KeyPageUpKeyDownKeyRightKeyUpKeyLeftKeyF12KeyF11KeyF10KeyF9KeyF8KeyF7KeyF6KeyF5KeyF4KeyF3KeyF2KeyF1 SpecialKeyaltctrlshift Modifiers MouseButtonCharKeyGraphics.UI.GLUT.TypesAdditionalButton WheelDownWheelUp RightButton MiddleButton LeftButtonfloatint TimeInterval NoiseDetailnoiseDetailsOctavesnoiseDetailsFalloffColDrawModeRadiusCenterCornerCornersRectMode EllipseModePioP3P2 frameCountPioRef newPioRef readPioRef writePioRef modifyPioRefProc procSetup procUpdateprocUpdateTimeprocDrawprocMousePressedprocMouseReleasedprocMouseClickedprocMouseDraggedprocMouseMovedprocKeyPressedprocKeyReleased procKeyTypedDrawUpdaterunProcwinSizewinWidth winHeightsizesmoothnoSmooth frameRateredrawloopnoLoop translaterotaterotateXrotateYrotateZscale resetMatrixlocal applyMatrixshearXshearYstrokenoStrokefillnoFill strokeFill backgroundclearrgbgreyrgbagreyasetAlphawhiteblacknavyblueaquatealolivegreenlimeyelloworangeredmaroonfushsiapurplegraysilveronCircleonLineuontrianglerectquadpolygonpoint pointPathlinelinePathellipsecirclebezier ellipseModerectMode strokeWeightmousemouseXmouseY relMouseX relMouseYrelMouse mouseButtonkey modifiersyearmonthdayutcHourhourminutesecondmillisprintln randomSeedrandomrandom2randomP2 randomCol randomColarandomGaussian noiseSeed noiseOctaves noiseDetailnoise1noise2noise3 FloatIntervalremap constrain2 constrainradiansdegreeseerad TimeStatetimeLast timeStart initTimeState getDurationLoopModeLoopNoLoopRedraw FrameState frameLoopupdateFrameCount$fDefaultLoopMode$fDefaultFrameStateFont FontState fontCurrent fontInitSizefontSize$fDefaultFontStateSeedRndState rndRandomGen rndNoiseGenrndNoiseDetail$fDefaultNoiseDetail$fDefaultRndStateglCol setupWindowglSize projection2 getWindowSizef2dv2p2v $fDefaultCol%OpenGL-3.0.1.0-CZvTzLMwWwjLxPRi98a4dn'Graphics.Rendering.OpenGL.GL.CoordTransPositionKeyStateDownUp InputStatelastPressedKeypressedModifiers mousePosition pressedButton$fDefaultInputState$fDefaultModifiers StrokeJoin JoinMiter JoinBevel JoinRound StrokeCapRoundSquareProject DrawStatedrawEllipseMode drawRectMode drawStrokeCapdrawStrokeJoindrawStrokeWeightdrawFill drawStroke$fDefaultStrokeJoin$fDefaultStrokeCap$fDefaultDrawMode$fDefaultDrawState GlobalStateglobalInputStateglobalRndStateglobalDrawStateglobalFontStateglobalTimeStateglobalFrameStateunPiorunPioreadPio readStatePiomodifyStatePiodefGlobalStateonInputonRndonDrawonFontonFrameonTimeonTimeIOonState onStateIO*vector-space-0.10.3-KPlG9C0OG6hFMAX2h2SdylData.VectorSpaceproject normalized magnitude magnitudeSq linearCombolerp^*^/ VectorSpaceScalar*^ InnerSpace<.>Data.AdditiveGroupinSum2inSumsumV AdditiveGroupzeroV^+^negateV^-^SumgetSum putKeyPressputMouseButton putPositiongetMousePositiongetLastPressedKeygetPressedModifiersgetMouseButton getRandomGen getNoiseGengetNoiseDetail putRandomGen putNoiseGenputNoiseDetail putOctaves getStrokegetFillgetEllipseMode getRectModeputEllipseMode putRectMode putStrokeputFill getFrameRate putFrameRate getLoopMode putLoopMode getStartTimeunPioRefStstUserstGlobalinitStupdateStpassStgetTimeoutInterval getLoopInforeadRef $fDefaultProcbase Control.MonadguardGHC.BasejoinMonad>>=>>returnfailFunctor<$fmap Applicative<*pure<*>*>Data.TraversablemapMsequenceControl.Monad.IO.ClassMonadIOliftIOmfilter<$!>unless replicateM_ replicateMfoldM_foldM zipWithM_zipWithM mapAndUnzipMforever<=<>=>filterMforMControl.Applicativeoptional WrappedMonad WrapMonad unwrapMonad WrappedArrow WrapArrow unwrapArrowZipList getZipListData.Functor.ConstConstgetConst Data.Foldablemsum sequence_forM_mapM_ Data.Functorvoid<$>apliftM5liftM4liftM3liftM2liftMwhen=<<liftA3liftA2liftA<**> Alternativeempty<|>somemany MonadPlusmzeromplus1data-default-class-0.1.2.0-FYQpjIylblBDctdkHAFeXAData.Default.ClassDefaultdefrotateBy printMatrix cornerRectmodeRectPointssetStrokeColormodeEllipsePoints ellipsePointsdrawP2 drawProcP2setColbezierPointsNumdategetTime getUtcTime boxMulleronRandomonNoiseMonoidmemptymappendmconcat Data.Monoid<>DualgetDualEndoappEndoAllgetAllAnygetAnyProduct getProductFirstgetFirstLastgetLastAltgetAlt Data.Crossnormal HasNormal normalVecOneTwoThree HasCross2cross2 HasCross3cross3Data.AffineSpace affineComboalerpdistance distanceSq.-^ AffineSpaceDiff.-..+^