lJ      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ NoneLDefine recursor over a data type. The recursor will apply an inner function ) over subexpressions of the same type. /Automatic derivation of Recursive class, using . RList of the Proc_* types which can be used as arguments, set into variables, etc. =Return the actual name of a type used in processing.js code. Pretty instance of ProcList. Create ProcType instance for a Proc_* type, 2 given the function declaration of checkForArg. Pretty instance of ProcArg. Pretty instance of ProcArg. && None?Type of keyboard key codes. Type of keyboard keys. Similar to the  class, but for Proc_* types. Render a value as a . Type of textual values.  It is recommended to enable the OverloadedStrings extension.  Note that  is an instance of the  class. Type of characters. Type of images. Floating point numbers.  The provided % instance checks the equality of the ' internal expression, not the value. Integer numbers. Boolean values. Class of recursive types. The  function applies the &given function to every subexpression *of the same type. For example, this would be the recursor over lists:  recursor f [] = [] recursor f (x:xs) = x : f xs &Instances of Recursive can be derived using $(deriveRecursive ''Type). %Code executed when a key is pressed. 2Code that is executed when the mouse is released. 1Code that is executed when the mouse is clicked. The drawing loop. In the setup part, settings like size or   frame rate are supplied. The preamble is the code that is executed # at the beginning of the script. Function extension. Operator extension. 'Processing.js syntax for conditionals.  <bool> ? <a> : <a> (This constant indicates how many spaces ) are added in each indentation. Events % and conditionals add indentation.  Value of .  Value of .  Negation.  Disjunction.  Conjunction. Cast a  value. Cast an  value. Calculate the  of a . 'Round a number to the closest integer. Cast a  value. Noise random function. Cast a  to a . Cast a  value. Append two text strings. !Cast a strict  value.  WARNING: , , ,  and  2 methods are undefined. They are not present in  processing.js.  WARNING:  method is undefined.  WARNING:  method is undefined. "!Class of Processing value types (Proc_* types). Proc_*/ types are types from the world of Processing. 3 Some of them are similar to Haskell types, like   and . However, they are not equal. Proc_* types  are instance of /. However, you should instead use methods from  the analog . class. Proc_*# types contain expressions instead  of values. Think of 2+2 instead of 4. Under this situation,  2+2 /= 3+15, since they are different expressions, even if they 6 evaluate to the same value. Actually, you will get   from the evaluation of  2+2 == 3+1, since the library is smart B enough to figure out they have the same value. But, please, don't  rely on this. Use the . and ) classes instead. 9 They return Processing boolean expressions instead of  values. A Anyway, the types of the library will try to force you to use Proc_*  types everywhere. EThe reason this library stores expressions instead of values is that " it needs to handle things like 2+x, where x is an unknown value. H However, an effort is done to ensure that each expression is reduced  to its minimum extension. 'Create a variable assignment, provided 4 the name of the variable and the value to asign. Create a list. "Create an argument for a command. Variable reading. Conditional value. 3Check if a variable is contained in an expression. #"Type of variables storing arrays. $Size of the array. %Type of variables. &Get the name of a variable. 'A piece of Processing code. ) The type parameter indicates what the  context of the code is. ' This context will allow or disallow % the use of certain commands along  different events. )Sequence to pieces of code with the same - context type. This way, code that belongs * to different parts of the program will  never get mixed. An empty piece of code. 'Internal function to create variables. (-Get the name of a variable storing an array. -Internal function to create array variables. 1Translate an Array variable to the correspondent  component variable. ) class for Proc_* values. . class for Proc_* values. 1A complete Processing script. 5It consists in several parts, most of them optional. +To generate each part of the code, use the ProcM monad  and the functions from the !Graphics.Web.Processing.Interface  module. Then, run runProcM or  execProcM to get the  code result. !More abstract functions generate 1 values as well.  See modules Graphics.Web.Processing.Mid and Graphics.Web.Processing.Simple  for two alternative ways. *Class of reducible types. Values of these ) types contain expressions that can be  reducible. Find a fix point of the  function from  any value. If  is well defined, this function  must end. 9Empty script. .      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[ \]^_`abcdefg !hijklmnopqrstuvwxyz{|}~"#$%&'()*+,-./0123456789      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWX  !"#$%&'()*+,-./0123456789     3210/.-,+*)('&%$#"!  >=<;:987654XWVUTSRQPONMLKJIHGFEDCBA@?YZ[   \]^_`abcdefg !hijklmnopqrstuvwxyz{|}~"#$%&'()*+,-./0123456789 None::Types in this instance form a monad when they are applied  to a context c$. They are used to write Processing  code. ;Internal function to process commands in the target monad. =Internal function to process asignments in the target monad. EInternal function to process variable creations in the target monad. KInternal function to process array varaible creations in the target monad. Write a comment in the code. Conditional execution. Lift a ? computation. ;-Create a new variable with a starting value. <<Create a new array variable with a starting list of values. =Read a variable. >!Write a new value to a variable. ?.Processing script producer monad. The context c indicates the context  of the underlying ',. This context restricts the use of certain 4 commands only to places where they are expected. EThe commands that you can run under this monad are mostly defined in  !Graphics.Web.Processing.Interface. -Once you have all the commands you want, use @ or A ; to generate the corresponding Processing code under the ' type. @#Generate Processing code using the ? monad.  The code output is reduced. Run a ?) computation with an initial var number. > It also applies a reduction to the output Processing code. A#Generate Processing code using the ? monad, discarding the final  value.  execProcM = snd . runProcM Add 11 to the variable counter and returns the result. !Get the current variable number. !Set the current variable number. B'Read a component of an array variable. C(Write a component of an array variable. 2When using this instance, please, be aware of the  behavior of =. ,It does not matter when the variable is read.  The result will always. hold the last value asigned to the variable.  For example, this code   v <- newVar 10  ten <- readVar v  writeVar v 20  point (10,ten) will draw a point at (10,20). : Condition.  Execution when the condition is .  Execution when the condition is . ;<=>?@ABC:;<=>?@ABC: ;<=>?@ABCNone #$%&(;<=>BC %&#$$&(;=><BCNone The Expression Counter :The Expression Counter is nothing else than a state monad 6storing a multiset. We place in this multiset all the :subexpressions in the code. Expressions that are repeated <several times will have then an ocurrence greater than one. 9This allow us to calculate the most common subexpression (in a piece of code. See mostFreq below. The Optimizable class. AThe Optimizable class contains methods to help the production of ;optimization functions. Its instances are generated by TH. +Maximum number of operations allowed for a  % calculation to be considered cheap. ,Number of times an expression is considered & repeated enough to be substituted. %Check if a calculation is expensive,  depending on . Add an expression to the expression counter. ;Most frequent expensive expression within a piece of code.  It returns  when no expensive expression 3 was found, or they are not repeated enough (see ). 8 If there are more than one most frequent expression,  it returns one of them.  Assign a substitution variable a expression, 1 and use that variable in the rest of the code ' instead of the original expression. DLOptimization by substitution. It looks for commonly repeated operations and ? create variables for them so they are only calculated once. 6This optimization is applied automatically when using  execScriptM. ILook at the generated to code to see which substitutions have been made. . They are delimited by comments, with title "Substitution Optimization settings. : If this is not present, no substitution has been made. E.Optimizations are projections. In particular:   let f = optimizeBySubstitution  in f x == f (f x) :This function checks that this equality holds for a given x. C Apply it to your own script to check that the property is true. A Tests has been applied to randomly generated scripts, but for  them, f "H id. 2  Index. Optimization variable name. Substitution variable index. Expression to be substituted. Original code. Assignment and result code.    DEDEDE&     DENoneFRender a script as a lazy . GRender a script using F and  write it directly in a file. H Conditional value. For example: % if_ (x #> 3) "X is greater than 3." . "X is less than or equal to 3." FGH8  !"')*+,-./0123456789FGH8123456789FG'  "! ./0)*+,-HFGHNone-ISpecial keys. OKey modifiers. S Arrow keys. X(Keyboard keys recognized by Processing. ]-A point as a pair of floating point numbers. ^$RGBA colors. Values must be between . 0 and 255, including in the alpha channel. ` Red channel. aBlue channel. bGreen channel. cAlpha channel (opacity). & 0 means transparent, and 255 opaque. d3Class of contexts where the user can draw pictures  in the screen. eWidth of the canvas. fHeight of the canvas. g4Frames since the beginning of the script execution. h)Approximate number of frames per second. iNoise random function. j:Write a variable with a random number within an interval. kSet the drawing color. lSet the filling color. m$Fill the screen with a given color. nSet the weight of the lines. oDraw a ellipse. pDraw a circle. q Draw an arc. 2The arc is drawn following the line of an ellipse  between two angles. r Draw a line. sPrints a dot. t1A quad is a quadrilateral, a four sided polygon. 3 The first parameter is the first vertex and the 5 subsequent parameters should proceed clockwise or / counter-clockwise around the defined shape. u2Draws a rectangle to the screen. A rectangle is a 8 four-sided shape with every angle at ninety degrees. - The first parameter set the location, the 9 second sets the width, and the third sets the height. v:A triangle is a plane created by connecting three points. wBzier curve. #Begin shape command. Not exported.  !End shape command. Not exported. !Vertex command. Not exported. xPolygon drawer. yDisplay a text in the screen.  The color is specified by l. z5Apply a rotation to the following pictures, centered  at the current position. {4Apply a scaling to the following pictures, centered  at the current position. |Move the current position. }!Reset the transformation matrix. ~1Conditional execution. When the boolean value is , 9 it executes the first monadic argument. Otherwise, it A executes the other one. In any case, the result is discarded.  See also H. /Get the current position of the mouse pointer. 'This function takes a variable of type  and a X, and sets the variable to  ! if the key pressed is the given X$. Otherwise, the variable is set to . Set the size of the canvas. ;Specify the number of frames to be displayed every second. - The default rate is 60 frames per second. 7Include a comment in the current position of the code.  You normally don'.t need to read the processing.js code output, ; but this function can be useful to analyse or debug it. DIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijTarget variable. Left endpoint of the interval.  Right endpoint of the interval. "klmnoCenter of the ellipse. Width of the ellipse. Height of the ellipse. pCenter of the circle. Radius. qCenter of the ellipse. Width of the ellipse. Height of the ellipse. Initial angle (in radians). End angle (in radians). rStarting point.  End point. sLocation of the point. tuLocation of the rectangle. Width of the rectangle. Height of the rectangle. vwInitial point. First control point. Second control point.  End point.  !xyText to draw.  Position. Width. Height. z{Horizontal scaling. Vertical scaling. |Horizontal displacement. Vertical displacement. }~#$%&'<:IJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~<efjid^_`abcklmn]opqrstuvwxy|z{}X\[ZYSWVUTORQPINMLKJ~gh:/INMLKJORQPSWVUTX\[ZY]^_`abcdefghij"klmnopqrstuvw !xyz{|}~#$%&'None  !"#$%&'()*+,-./0123456789:;<=>?@ABCFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~?@ANone IContext of an event. The context determines which functions can be used.   is not an instance of  to avoid using  as  an event (see ). @Scripter monad. This monad is where Processing code is written. + Because of some implementation details,  has a context c.  However, this context is always . Monad of events. Use ! to insert an event in a script (). 1 To write the event code, use the functions in  &Graphics.Web.Processing.Core.Interface, since  is an instance  of :. (Plain empty event state. ESet an event. Different events are specified by the instances of the   class. )For example, the following code sets the l' pattern in the setup event (the event ; that is called once at the beginning of the execution). # on Setup $ fill $ Color 0 0 0 255 Like , but skips optimizations. >Execute the scripter monad to get the full Processing script.  Use F or G to render it. :After generating the script, the output code is optimized  using D. )Magic! Keep it private, it's our secret! *Magic! Keep it private, it's our secret! +CEvents created inside a conditional will be automatically deleted.  They must be  unconditional. *,-./0123456789:;<(=>?)*@ABCD+EFGHIJK  !"#$%&'()*+,-./0123456789:;<=>BCFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~,-./0123456789:;<(=>?)*@ABCD+EFGHIJK None  !"#$%&'()*+,-./0123456789:;<=>BCFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~None2Typeclass of values that can be stored in several  native variables (%). /Calculate how many native variables are needed  to store a value. !Array variable of custom values. Size of the custom array. ETypeclass of custom values, which can be stored in custom variables ().  Version of ; for custom variables.  Version of < for custom variables.  Version of = for custom variables.  Version of > for custom variables.  Version of H for custom values. Variable with custom values. L8Modify all the variable names inside a custom variable. -Read a component of a custom array variable. .Write a component of a custom array variable. 0MNOPQRSTUVWLXYZ[\]^_`abcdefghijklmn  MNOPQRSTUVWLXYZ[\]^_`abcdefghijklmnNoneo2SimpleEventM monad: EventM with a state attached. The monoid of plane figures. List of figures. -Scale a figure by the given x and y factors. /Rotate a figure by the given angle in radians. 1Translate a figure in the direction of a vector. #Set the filling color of a figure.  Set the line color of a figure. Text. 7Bezier curve. First and last arguments are the initial 5 and end points of the curve. The other points are  control points. +Rectangle such that the top-left corner is - at the specified point, and its width and 4 height are specified by the other two arguments. ,Arc. The arc is drawn following the line of " an ellipse between two angles. 4 The first argument is the center of the ellipse. 6 The next two arguments are the width and height of  the ellipse. 2 The last two arguments are the initial and end  angles of the arc. ,Circle centered at the given point and with  the specified radius. %Ellipse centered at the given point, ) with width and height also specified.  Polygon given a list of vertex. Line joining a list of points. !A path is just a list of points. p)Adjust a point so x coordinates increase . to the right and y coordinates to the top. ,Display a figure using a Processing script. %Create a Processing animation from a -valued function. )Framework to create interactive scripts. 9Note that is required for the state to be an instance of . 1 More info on how to instantiate a type in the  class in the  %Graphics.Web.Processing.Mid.CustomVar module. #qrstoupvwxyz{|0Width (if none, takes as much as is available). 1Height (if none, takes as much as is available). Background color. Figure to display. 0Width (if none, takes as much as is available). 1Height (if none, takes as much as is available).  Frame rate. Background color. 1Function to produce the next frame of animation, # given the current frame number. 0Width (if none, takes as much as is available). 1Height (if none, takes as much as is available).  Frame rate. Initial state. How to print the state. 2Background color, depending on the current state. *Function to step the world one iteration. . It is passed the number of frames from the  beginning. 0Function called each time the mouse is clicked. 8Key events. List of pairs, where the first component is  a X2 and the second component is the reaction to that  X. File examples/keys.hs contains an example of  usage. }~  !"')*+,-./0123456789FGHIJKLMNOPQRSTUVWXYZ[\]^_`abc.^_`abc]X\[ZYSWVUTORQPINMLKJqrstoupvwxyz{|}~ None>Create a canvas element which contain a Processing animation. ( The output is of the following form: < <canvas data-processing-sources="specified path"></canvas> #Create the following HTML element:  ( <script src="specified path"></script> Use it to import the  processing.js script,  inside the head tag. =Default template for visualizing Processing scripts in HTML. ?Write a Processing script and the HTML default template for it  to files, using G and .  All the 6s must be relative to where the HTML file is written. File path to the script. Location of the  processing.js script. Where to find the  processing.js module. *File name for the Processing script (with .pde extension).  Html title.  Html output. Where to find the  processing.js module. +Where to write the Processing script (with .pde extension).  Html title. #Where to write the HTML file (with .html extension). Processing script.                          ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 9 : ; < = > ? @ A B C D E F G H I JKLMNOPQRSTUVWXYZ[\]^_`ZPabccdefghijklmnopqrstuvwxyz{|}~                                      ! " # $  % &  ' ( ) * + , - . / 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 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 { | } ~                                   +  -                                                                       F           !"#$%&'()*+,-.//01234567789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijkllmnopqrstuvwxyzy{y|y}y~yyyyyyyyyyyyyyyyyyyyyyyy processing-1.2.0.0"Graphics.Web.Processing.Core.Types Graphics.Web.Processing.Core.Var&Graphics.Web.Processing.Core.InterfaceGraphics.Web.Processing.Basic Graphics.Web.Processing.OptimizeGraphics.Web.Processing.Mid%Graphics.Web.Processing.Mid.CustomVarGraphics.Web.Processing.SimpleGraphics.Web.Processing.HtmlGraphics.Web.Processing.Core.TH#Graphics.Web.Processing.Core.Primal"Graphics.Web.Processing.Core.MonadGraphics.Web.Processing Proc_Showpshow Proc_Text Proc_Char Proc_Image Proc_FloatProc_Int Proc_Bool KeyPressed MouseReleased MouseClickedDrawSetupPreambletruefalsepnot#||#&&fromBoolfromIntpfloorpround fromFloat intToFloatfromChar+.+ fromStTextProcTypeArrayVar arraySizeVarvarNameProcCode arrayVarNameProc_Ord#<=#<#>=#>Proc_Eq#==#/= ProcScript proc_preamble proc_setup proc_drawproc_mouseClickedproc_mouseReleasedproc_keyPressed emptyScript ProcMonadnewVar newArrayVarreadVarwriteVarProcMrunProcM execProcM readArrayVar writeArrayVaroptimizeBySubstitution&prop_optimizeBySubstitution_projection renderScript renderFileif_ SpecialKeyESCRETURNENTERTAB BACKSPACE KeyModifierSHIFTCONTROLALTArrowKeyRIGHTLEFTDOWNUPKeyModKeyCharKey Proc_PointColorredcbluecgreencalphacDrawing screenWidth screenHeight frameCount getFrameRatenoiserandomstrokefill background strokeWeightellipsecirclearclinepointquadrecttrianglebezierpolygondrawtextrotatescale translate resetMatrixifM getMousePointmatchKeysize setFrameRatecommentContextScriptMEventMonexecScriptMFast execScriptM VarLength varLengthCustomArrayVarcustomArraySize CustomValuenewVarC newArrayVarCreadVarC writeVarCifC CustomVar readArrayVarCwriteArrayVarCFigureFiguresScaleRotate Translate FillColor LineColorTextBezier RectangleArcCircleEllipsePolygonLinePath displayFigure animateFigureinteractiveFigure procCanvas importScript defaultHtml writeHtmldefineRecursorderiveRecursive procTypeNamesrealNameprocListPrettyInst procTypeInstprocArgPrettyInstprocAssignPrettyInst dataProcArgdataProcAssignptypeltype dataProcList||* checkForVar procTypeMechsderiveProcTypeInstsisVarIn isVarInArg isVarInAssign assignVarName->.deriveCustomValues varLengthInstcustomValueInstoptimizableTypesderiveOptimizableoptimizableInstreplaceInOtherCreplaceInSelfC>>>returnuoptimizableVars browseOther browseSelf+.oneEnumOpsC Proc_KeyCodeProc_KeybaseGHC.ShowShow Data.StringIsStringghc-prim GHC.ClassesEq RecursiverecursorextendfextendopdocCond indentLevel GHC.TypesTrueFalseBoolIntGHC.RealfloorFloatnoisefChar text-0.11.3.1Data.Text.Internal$fFloatingProc_Float GHC.Floatsinhcoshasinhacoshatanh$fNumProc_FloatGHC.Numsignum $fNumProc_Int proc_assign proc_listproc_arg proc_read proc_cond>>. emptyCode varFromTextarrayVarFromText arrayVarToVarOrd ReducibleiteratedReducereduceKeyCode_DELETE KeyCode_ESCKeyCode_RETURN KeyCode_ENTER KeyCode_TABKeyCode_BACKSPACE KeyCode_SHIFTKeyCode_CONTROL KeyCode_ALT KeyCode_RIGHT KeyCode_LEFT KeyCode_DOWN KeyCode_UP KeyCode_VarKey_Char Key_CODEDKey_Var Text_Cond Text_AppendShow_Int Show_Float Show_Char Show_BoolText_Var Char_CondChar_Var Image_Cond Image_Var Float_Cond Float_Random Float_Noise Float_Round Float_FloorFloat_ArctangentFloat_Arccosine Float_Arcsine Float_Cosine Float_Sine Float_Log Float_Sqrt Float_Exp Float_Abs Float_Var Float_Neg Float_Mod Float_Mult Float_DivideFloat_Substract Float_SumInt_Cond Int_Round Int_FloorInt_AbsInt_VarInt_ModInt_Mult Int_Divide Int_SubstractInt_Sum Bool_Cond KeyCode_EqKey_EqText_EqChar_NEqChar_EqFloat_GFloat_GEFloat_LFloat_LE Float_NEqFloat_EqInt_GInt_GEInt_LInt_LEInt_NEqInt_EqBool_NEqBool_EqBool_VarProc_AndProc_OrProc_Neg Proc_False Proc_TrueExtendedextendpatmatch GArbitrary garbitrary PArbitrary parbitrary sizeLimit pfunctiondocEqdocNEqdocLEdocLdocGEdocG$fPrettyProc_KeyCode$fPArbitraryProc_KeyCode$fPrettyProc_Key$fPArbitraryProc_Key$fProc_ShowProc_Int$fProc_ShowProc_Float$fProc_ShowProc_Char$fProc_ShowProc_Bool$fIsStringProc_Text$fPrettyProc_Text$fExtendedTextProc_Text$fArbitraryProc_Text$fPArbitraryProc_Text$fPrettyProc_Char$fExtendedCharProc_Char$fArbitraryProc_Char$fPArbitraryProc_Char$fPrettyProc_Image$fArbitraryProc_Image$fPArbitraryProc_Image$fFractionalProc_Float$fPrettyProc_Float$fExtendedFloatProc_Float$fArbitraryProc_Float$fPArbitraryProc_Float$fIntegralProc_Int$fRealProc_Int$fEnumProc_Int$fPrettyProc_Int$fExtendedIntProc_Int$fArbitraryProc_Int$fPArbitraryProc_Int$fPrettyProc_Bool$fExtendedBoolProc_Bool$fArbitraryProc_Bool$fPArbitraryProc_Bool$fPArbitrary[]$fPArbitraryChar$fPArbitraryText$fPArbitraryFloat$fPArbitraryInt$fPArbitrarySeq$fPArbitraryMaybe$fGArbitraryK1$fGArbitraryM1$fGArbitrary:+:$fGArbitrary:*:$fGArbitraryU1innerVarSequenceComment Conditional AssignmentCreateArrayVar CreateVarCommandProcListCharListTextList ImageList FloatListIntListBoolList ProcAssign CharAssign TextAssign ImageAssign FloatAssign IntAssign BoolAssignProcArgCharArgTextArgImageArgFloatArgIntArgBoolArg$fMonoidProcCode$fPrettyProcCode$fArbitraryProcCode$fPArbitraryProcCode$fPArbitraryProcList$fPArbitraryProcAssign$fArbitraryProcArg$fPArbitraryProcArg$fPrettyProcArg$fProc_OrdProc_Float$fProc_OrdProc_Int$fProc_EqProc_KeyCode$fProc_EqProc_Key$fProc_EqProc_Text$fProc_EqProc_Char$fProc_EqProc_Float$fProc_EqProc_Int$fProc_EqProc_Bool$fProcTypeProc_Bool$fRecursiveProc_Bool$fRecursiveProc_IntreduceProcPairpvoid$fPrettyProcScript$fArbitraryProcScript$fPArbitraryProcScript$fReducibleProcCode$fReducibleProcArg$fReducibleProc_Float$fRecursiveProc_FloatcommandMassignM createVarMcreateArrayVarM writeCommentiffliftProc runProcMWith newVarNumber getVarNumber setVarNumber$fProcMonadProcMunProcM intVarName $fMonadProcM$fApplicativeProcM$fFunctorProcM ExpCounter Optimizable limitNumber occurNumber isExpensiveaddExpmostFreq Data.MaybeNothing varForExpSubsM SubsState codeWritten codeStacksubstitutionIndexmutatedVariablesnumOps browseBool browseInt browseFloat replaceInBool replaceInIntreplaceInFloat browseArgs browseAssign browseCode replaceInArgreplaceInAssign replaceInCode execCounter optVarNamesubstitutionOversubstitutionOverAuxaddSubsCommentssubsPrevCommentsubsPostComment addToStack addToWrittensetIndex resetStackmutateVariablecleanVariables isVarInCodeapplySubstitutionaddWithMutationscodeSubstitutionrunSubstitution subsOptimize$fOptimizableProc_BoolData.Text.Lazy.Internal charsPerLine beginShapeendShapevertex colorArgskeySplit$fDrawingMouseReleased$fDrawingMouseClicked $fDrawingDraw$fDrawingSetupemptyEventState switchContextswitchContextE$fProcMonadScriptMaddEvent unScriptM ScriptState script_code script_setup script_drawscript_mouseClickedscript_mouseReleasedscript_keyPressedunEventM EventStateevent_preamble event_codeaddCodeaddPCodeemptyScriptState$fContextKeyPressed$fContextMouseReleased$fContextMouseClicked $fContextDraw$fContextSetup$fMonadScriptM$fApplicativeScriptM$fFunctorScriptM$fProcMonadEventM $fMonadEventM$fApplicativeEventM$fFunctorEventM mapCustomVar GCustomValuegnewVarC gnewArrayVarC greadVarC gwriteVarCgifC GVarLength gvarLengthcustomInnerVararrayVarToVarCfromVar fromCustomVar fromArrayVarvarDropcastCVar castCAVarleftPrightP$fGCustomValueK1$fGCustomValueM1$fGCustomValue:+:$fGCustomValue:*:$fGVarLengthK1$fGVarLengthM1$fGVarLength:+:$fGVarLength:*:$fGVarLengthU1$fCustomValue(,,)$fVarLength(,,)$fCustomValue(,)$fVarLength(,)$fVarLengthProc_Bool SimpleEventM adjustPointSettingscurrentLineColorcurrentFillColorpairListdefaultSettings setLineColor getLineColor setFillColor getFillColor figureSEvent figureEventkeyEvent$fMonoidFigure Data.Monoid<>mconcatmappendmemptyMonoidgetDualDualappEndoEndogetAllAllgetAnyAnygetSumSum getProductProductgetFirstFirstgetLastLastGHC.IOFilePath defaultCSS