R?P      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                                  ! " # $ % & ' ( ) * + , - . / 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 None'The current dimensions of the window. "The current width of the window. #The current height of the window. None2A data structure describing a button on a mouse. $The current position of the mouse. (The current x-coordinate of the mouse. (The current y-coordinate of the mouse. -The current state of a certain mouse button. 1 True if the mouse is down, false otherwise.  P    PNone ;A data structure describing a physical key on a keyboard. Q The SDL bindings for Haskell don'3t wrap this, so we have to use the FFI ourselves. REA utility function for getting a list of SDL keys currently pressed.  Based on  Khttp://coderepos.org/share/browser/lang/haskell/nario/Main.hs?rev=22646#L49. &Whether either shift key is pressed. (Whether either control key is pressed. Whether a key is pressed. 3Whether the enter (a.k.a. return) key is pressed. #Whether the space key is pressed. 2A list of keys that are currently being pressed. NA directional tuple combined from the arrow keys. When none of the arrow keys - are being pressed this signal samples to (0, 0), otherwise it samples to a R direction based on which keys are pressed. For example, pressing the left key  results in (-1, 0), the down key (0, 1), up and right (1, -1), etc. SJA utility function for setting up a vector signal from directional keys. Similar to the ? signal, but uses the popular WASD movement controls instead.  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~QRST  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ ~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#"!  ~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#"!  QRSTNoneA type describing a joystick. $The amount of joysticks available. _The name of a joystick. Can throw an exception when sampled if the joystick index is invalid. gThe joystick at a certain slot. Can throw an exception when sampled if the joystick index is invalid. The index of a joystick. .The amount of axes available for a joystick. /The amount of balls available for a joystick. .The amount of hats available for a joystick. 1The amount of buttons available for a joystick. 0The current state of the axis of the joystick. 7The current state of the hat of the joystick, returned / as a directional tuple. For example, up is (0, -1),  left (-1, 0), bottom-right is (1, 1), etc. UWA utility function for mapping a list of hat states to an averaged directional tuple. VBA utility function for accumulating the total directional tuple. 2The current state of the button of the joystick. 0The current state of the ball of the joystick. WXA utility function for mapping the optional value to a null tuple or the actual tuple. UVW UVWNone*A data structure describing an automaton. K An automaton is essentially a high-level way to package piped behavior F between an input signal and an output signal. Automatons can also B be composed, allowing you to connect one automaton to another H and pipe data between them. Automatons are an easy and powerful way D to create composable dynamic behavior, like animation systems. LCreates a pure automaton that has no accumulated state. It applies input to  a function at each step. KCreates an automaton that has an initial and accumulated state. It applies : input and the last state to a function at each step. ASteps an automaton forward, returning the next automaton to step ( and output of the step in a tuple. 3Combines a list of automatons that take some input . and turns it into an automaton that takes 5 the same input and outputs a list of all outputs # from each separate automaton. IA useful automaton that outputs the amount of times it has been stepped, ! discarding its input value. JRuns an automaton with an initial output value and input signal generator N and creates an output signal generator that contains a signal that can be # sampled for the output value. XY XYNoneOA type describing an amount of time in an arbitary unit. Use the time composing/#converting functions to manipulate  time values. ,A time value representing one millisecond. 'A time value representing one second. 'A time value representing one minute. %A time value representing one hour. ?Converts a time value to a fractional value, in milliseconds. :Converts a time value to a fractional value, in seconds. :Converts a time value to a fractional value, in minutes. 8Converts a time value to a fractional value, in hours. 7Converts a frames-per-second value into a time value. QA signal that returns the time that the game has been running for when sampled. HA signal that returns the time since it was last sampled when sampled. Z0A utility function that does the real magic for . dA signal that blocks the game thread for a certain amount of time when sampled and then returns the k amount of time it blocked for. Please note that delaying by values smaller than 1 millisecond can have  platform-specific results. Z ZNone&Creates a signal that never changes. \Applies a function to a signal producing a new signal. This is a wrapper around the builtin  [Q function that automatically binds the input signal out of the signal generator.  render <~ Window.dimensions $Applies a function to two signals. &Applies a function to three signals. %Applies a function to four signals. %Applies a function to five signals. $Applies a function to six signals. &Applies a function to seven signals. &Applies a function to eight signals.  An alias for . UApplies a function within a signal to a signal. This is a wrapper around the builtin \ operator K that automatically binds the input signal out of the signal generator. 0 render <~ Window.dimensions ~~ Window.position JCreates a past-dependent signal that depends on another signal. This is a  wrapper around the ]- function that automatically binds the input T signal out of the signal generator. This function is useful for making a render 6 function that depends on some accumulated state. GCreates a signal that counts the amount of times it has been sampled. LCreates a signal that counts the amount of times an input signal has passed  a predicate when sampled.  Safe-InferredJA data structure describing a gradient. There are two types of gradients: R radial and linear. Radial gradients are based on a set of colors transitioned O over certain radii in an arc pattern. Linear gradients are a set of colors & transitioned in a straight line. LA data structure describing a color. It is represented interally as an RGBA % color, but the utility functions , , etc. can be used to convert 3 from other popular formats to this structure. Creates an RGB color. *Creates an RGB color, with transparency. A bright red color. A bright green color. A bright blue color. 4A yellow color, made from combining red and green. 4A cyan color, combined from bright green and blue. 5A magenta color, combined from bright red and blue. A black color. A white color. 8A gray color, exactly halfway between black and white. Common alternative spelling of . A medium red color. A medium blue color. A medium green color. 4A teal color, combined from medium green and blue. 4A purple color, combined from medium red and blue. A violet color. A dark green color. KCalculate a complementary color for a provided color. Useful for outlining L a filled shape in a color clearly distinguishable from the fill color. (Create an RGBA color from HSVA values. &Create an RGB color from HSV values. QCreates a linear gradient. Takes a starting position, ending position and a list L of color stops (which are colors combined with a floating value between 0.0 and 1.0 M that describes at what step along the line between the starting position E and ending position the paired color should be transitioned to).  3 linear (0, 0) (100, 100) [(0, black), (1, white)] 4The above example creates a gradient that starts at (0, 0)  and ends at  (100, 100). In other words, it'7s a diagonal gradient, transitioning from the top-left Y to the bottom-right. The provided color stops result in the gradient transitioning from  black to white. \Creates a radial gradient. Takes a starting position and radius, ending position and radius 4 and a list of color stops. See the document for ' for more information on color stops.  None+MA data structure describing a some sort of graphically representable object, D such as a polygon formed from a list of points or a rectangle. JA data type made up a collection of points that form a path when joined. SA data structure describing a few ways that graphics that can be wrapped in a form  and hence transformed. EA data structure describing how a shape or path looks when stroked. BA data structure describing the shape of the join of a line, i.e. + where separate line segments join. The  variant takes 2 an argument to limit the length of the join. >A data structure describing the shape of the ends of a line. DA data structure describing how a shape or path looks when filled. TA data structure describing a form. A form is essentially a notion of a transformed 4 graphic, whether it be an element or shape. See  for an insight : into what sort of graphics can be wrapped in a form.  8A data structure describing a piece of formatted text. ;A data structure describing something that can be rendered = to the screen. Elements are the most important structure 8 in Helm. Games essentially feed the engine a stream @ of elements which are then rendered directly to the screen. : The usual way to render art in a Helm game is to call  off to the . function, which essentially - renders a collection of forms together. PCreate an element from an image with a given width, height and image file path. K If the image dimensions are not the same as given, then it will stretch/shrink to fit. - Only PNG files are supported currently. PCreate an element from an image with a given width, height and image file path. a If the image dimensions are not the same as given, then it will only use the relevant pixels d (i.e. cut out the given dimensions instead of scaling). If the given dimensions are bigger than ; the actual image, than irrelevant pixels are ignored. VCreate an element from an image by cropping it with a certain position, width, height Z and image file path. This can be used to divide a single image up into smaller ones. QCreates the default line style. By default, the line is black with a width of 1, ) flat caps and regular sharp joints. )Create a solid line style with a color. *Create a dashed line style with a color. *Create a dotted line style with a color. ^'Utility function for creating a form. _JUtility function for creating a filled form from a fill style and shape.  BCreates a form from a shape by filling it with a specific color. !GCreates a form from a shape with a tiled texture and image file path. "5Creates a form from a shape filled with a gradient. #ICreates a form from a shape by outlining it with a specific line style. $FCreates a form from a path by tracing it with a specific line style. %\Creates a form from a image file path with additional position, width and height arguments. = Allows you to splice smaller parts from a single image. &!Creates a form from an element. '1Groups a collection of forms into a single one. (XGroups a collection of forms into a single one, also applying a matrix transformation. )+Rotates a form by an amount (in radians). *,Scales a form by an amount, e.g. scaling by 2.0 will double the size. +0Moves a form relative to its current position. , Moves a form'2s x-coordinate relative to its current position. - Moves a form'2s y-coordinate relative to its current position. .OCreate an element from a collection of forms, with width and height arguments. G All forms are centered and clipped within the supplied dimensions. C It is generally used to directly render a collection of forms. = collage 800 600 [move (100, 100) $ filled red $ square 100, H move (100, 100) $ outlined (solid white) $ circle 50] /Like .<, but it centers the forms within the supplied dimensions. 0,Creates a path for a collection of points. 1ACreates a path from a line segment, i.e. a start and end point. 21Creates a shape from a path (a list of points). 36Creates a rectangular shape with a width and height. 4,Creates a square shape with a side length. 50Creates an oval shape with a width and height. 6'Creates a circle shape with a radius. 7ECreates a generic n-sided polygon (e.g. octagon, pentagon, etc) with $ an amount of sides and radius. R     ^_ !"#$%&'()*+,-./01234567P      !"#$%&'()*+,-./01234567P     ./ !"#$%&'()*+,-01234567+     ^_ !"#$%&'()*+,-./01234567 None 8@A type describing an animation consisting of a list of frames. :PA type describing a single frame in an animation. A frame consists of a time at T which the frame takes place in an animation and the form which is how the frame # actually looks when rendered. ;ICreates an animation from a list of frames. The time value in each frame J is absolute to the entire animation, i.e. each time value is the time S at which the frame takes place relative to the starting time of the animation. . The list of frames should never be empty. <ICreates an animation from a list of frames. The time value in each frame H is relative to other frames, i.e. each time value is the difference K in time from the last frame. The list of frames should never be empty. ~ relative [(100, picture1), (100, picture2), (300, picture3)] == absolute [(100, picture1), (200, picture2), (500, picture3)] =kCreates a signal contained in a generator that returns the current form in the animation when sampled from ] a specific animation. The second argument is a signal generator containing a signal that Z returns the time to setup the animation forward when sampled. The third argument is a Q signal generator containing a signal that returns true to continue animating . or false to stop animating when sampled. >EThe form that will be rendered for a specific time in an animation. ?6The amount of time one cycle of the animation takes. `?A list of all the time values of each frame in the animation. aQGiven an animation, a function is created which resets the time of the animation $ if the animation was finished. bSHelper function which resets a timer if the timer got bigger than a given number. 89:;<=>?`ab89:;<=>?:89;<=>? 89:;<=>?`ab None @BCreates the default text. By default the text is black sans-serif  with a height of 14px. ACreates a text from a string. B'Creates a text element from a string. C=Creates a text element from any showable type, defaulting to  the monospace typeface. D!Creates an element from a text. E-Sets the weight of a piece of text to bold. F.Sets the slant of a piece of text to italic. G$Sets the color of a piece of text. H-Sets the typeface of the text to monospace. I*Sets the typeface of the text. Only fonts  supported by Cairo's toy font API are currently  supported. J+Sets the size of a text noticeably large. K#Sets the size of a piece of text. @ABCDEFGHIJK @ABCDEFGHIJK BCD@AEFGHIJK @ABCDEFGHIJK Nonec6A data structure describing the current engine state. 7 This may be in userland in the future, for setting $ window dimensions, title, etc. dXAttempt to change the window dimensions (and initialize the video mode if not already). W Will try to get a hardware accelerated window and then fallback to a software one. 0 Throws an exception if the software mode can't be used as a fallback. LAConverts radians into the standard angle measurement (radians). MAConverts degrees into the standard angle measurement (radians). N>Converts turns into the standard angle measurement (radians). @ Turns are essentially full revolutions of the unit circle. eJCreates a new engine state, spawning an empty cache spawned in an IORef. OGInitializes and runs the game engine. The supplied signal generator is F constantly sampled for an element to render until the user quits.  import FRP.Helm , import qualified FRP.Helm.Window as Window  ! render :: (Int, Int) -> Element S render (w, h) = collage w h [filled red $ rect (fromIntegral w) (fromIntegral h)]   main :: IO () 3 main = run $ fmap (fmap render) Window.dimensions fA utility function called by O that samples the element < or quits the entire engine if SDL events say to do so. gA utility function called by 'run\'' that polls all SDL events C off the stack, returning true if the game should keep running,  false otherwise. h=A utility function that renders a previously sampled element  using an engine state. iA utility function called by  'render\'' that does  the actual heavy lifting. jA utility function called by  'render\'\'' that is called by Cairo  when it's ready to do rendering. kFA utility function that lazily grabs an image surface from the cache,  i.e. creating it if it's not already stored in it. l6A utility function for rendering a specific element. m]A utility function that goes into a state of transformation and then pops it when finished. nKA utility function that sets the Cairo line cap based off of our version. oMA utility function that sets the Cairo line style based off of our version. pFA utility function that sets up all the necessary settings with Cairo E to render with a line style and then strokes afterwards. Assumes I that all drawing paths have already been setup before being called. qFA utility function that sets up all the necessary settings with Cairo C to render with a fill style and then fills afterwards. Assumes I that all drawing paths have already been setup before being called. rJA utility function that adds color stops to a pattern and then fills it. s A utility that renders a form. ctuvdLMNeOfghijklmnopqrs      !"#$%&'()*+,-./01234567LMNOOLMNctuvdLMNeOfghijklmnopqrsw  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                                                 ! " # $ % & ' ( ) * + , - . / 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 TUVWXYZ[\]^_`a_bcdef g h i j k l m n o p q r s t u v w x y z { | l } ~helm-0.4FRP.Helm.WindowFRP.Helm.MouseFRP.Helm.KeyboardFRP.Helm.JoystickFRP.Helm.Automaton FRP.Helm.TimeFRP.Helm.SignalFRP.Helm.ColorFRP.Helm.GraphicsFRP.Helm.Animation FRP.Helm.TextFRP.Helm dimensionswidthheightMouse RightMouse MiddleMouse LeftMousepositionxyisDownKeyUndoKeyEuroKeyPowerKeyMenuKeyBreakKey SysReqKeyPrintKeyHelpKey ComposeKeyModeKey LSuperKey RSuperKeyLMetaKeyRMetaKeyLAltKeyRAltKeyLCtrlKeyRCtrlKey LShiftKey RShiftKey ScrollLockKey CapsLockKey NumLockKeyF15KeyF14KeyF13KeyF12KeyF11KeyF10KeyF9KeyF8KeyF7KeyF6KeyF5KeyF4KeyF3KeyF2KeyF1Key PageDownKey PageUpKeyEndKeyHomeKey InsertKeyLeftKeyRightKeyDownKeyUpKeyKeypadEqualsKeyKeypadEnterKey KeypadPlusKeyKeypadMinusKeyKeypadMultiplyKeyKeypadDivideKeyKeypadPeriodKey KeypadNum9Key KeypadNum8Key KeypadNum7Key KeypadNum6Key KeypadNum5Key KeypadNum4Key KeypadNum3Key KeypadNum2Key KeypadNum1Key KeypadNum0Key DeleteKeyZKeyYKeyXKeyWKeyVKeyUKeyTKeySKeyRKeyQKeyPKeyOKeyNKeyMKeyLKeyKKeyJKeyIKeyHKeyGKeyFKeyEKeyDKeyCKeyBKeyAKey BackquoteKey UnderscoreKeyCaretKeyRightBracketKey BackslashKeyLeftBracketKeyAtKey QuestionKey GreaterKey EqualsKeyLessKey SemicolonKeyColonKeyNum9KeyNum8KeyNum7KeyNum6KeyNum5KeyNum4KeyNum3KeyNum2KeyNum1KeyNum0KeySlashKey PeriodKeyMinusKeyCommaKeyPlusKey AsteriskKey RightParenKey LeftParenKeyQuoteKey AmpersandKey DollarKeyHashKey QuotedBlKey ExclaimKeySpaceKey EscapeKeyPauseKeyEnterKeyClearKeyTabKey BackspaceKeyshiftctrlenterspacekeysDownarrowswasdJoystick availablenameopenindex availableAxesavailableBalls availableHatsavailableButtonsaxishatbuttonball AutomatonSteppurestatefulstepcombinecounterrunTime millisecondsecondminutehourinMilliseconds inSeconds inMinutesinHoursfpsrunningdeltadelayconstantliftlift2lift3lift4lift5lift6lift7lift8<~~~foldpcountcountIfGradientRadialLinearColorrgbrgbaredlimeblueyellowcyanmagentablackwhitegraygreymaroonnavygreentealpurpleviolet forestGreen complementhsvahsvlinearradialShapeArcShapeRectangleShape PolygonShapePath FormStyle GroupForm ElementForm ShapeFormPathForm LineStyle lineColor lineWidthlineCaplineJoin lineDashinglineDashOffsetLineJoinClippedSharpSmoothLineCapPaddedRoundFlat FillStyleTextureSolidForm formTheta formScaleformXformY formStyleTexttextUTF8 textColor textTypeface textHeight textWeight textSlantElement TextElement ImageElementCollageElementimage fittedImage croppedImage defaultLinesoliddasheddottedfilledtexturedgradientoutlinedtracedspritetoFormgroupgroupTransformrotatescalemovemoveXmoveYcollagecenteredCollagepathsegmentpolygonrectsquareovalcirclengon AnimationFrameabsoluterelativeanimateformAtlength defaultTexttoText plainTextasTexttextbolditaliccolor monospacetypefaceheaderradiansdegreesturns $fEnumMousesdlGetKeyState getKeyStatearrows' $fEnumKeyhat'hat''ball'$fArrowAutomaton$fCategoryAutomatondelta'baseGHC.BasefmapControl.Applicative<*>elerea-2.7.0.2FRP.Elerea.Simpletransferformfilltimes resetOnEnd resetOnEnd' EngineStaterequestDimensionsnewEngineStaterun'run''renderrender'render'' getSurface renderElement withTransform setLineCap setLineJoin setLineStyle setFillStyle setFillStyle' renderFormsmpcache