"      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~Safe;=>?AThe  type class is used to implement functions that have a variable number of arguments. It provides a family of type isomorphisms fun "E args -> res,where Gfun = a1 -> a2 -> ... -> an -> res, args = (a1, (a2, (..., (an, ()))))."Multiple curry: map a function (a , (a , ( &, ())) ! b to its curried form a ! a ! & ! b."Multiple uncurry: map a function a ! a ! & ! b to its uncurried form (a , (a , ( &, ())) ! b.A version of the  function that returns an .Safe;<=>?A)Available graphics formats for rendering. PostScript.Portable Document Format. iEncapsulated PostScript. The integer argument specifies which single page to extract from the document.  An ASCII-based debugging format. Boxed version of the   monad. The   monad is just a   wrapped around the ! monad. Its & and '8 methods automatically keep track of the file position. jA state to keep track of PDF document structure: current character count, current TOC, current page, etc.Current position in file. Object count.Cross-reference table.Next available page number. Page table.Next available font number.?Font table mapping each font's PostScript name to a local name.A PDF object reference.*A position in a file. The first byte is 0.The  monad. This is just a  wrapped around the ! monad.@A state to keep track of a current bounding box and page number.The type of page numbers.WA class to curry/uncurry functions in any boxed monad. This establishes an isomorphism @fun "E args -> Boxed m res,@where Ofun = a1 -> a2 -> ... -> an -> Boxed m res, args = (a1, (a2, (..., (an, ())))).jCreate an identical "boxed" copy of a type constructor. This is used for technical reasons, to allow the  operation to be typed.! A generic %."Terminate with a result.#Write a character.$Write a string.%A %- is any monad that one can output strings to.Minimal complete definition: & or '.&Write a character.'Write a string.(ZA data structure that holds application-specific meta-data and customization information.*Name of the software that created the file. Example: "MyApp 1.0". Note: this is intended to hold the name of the software, not the human user, that created the document.+.Definitions to go in the PostScript preamble.,5The type of custom definitions, to be used with the g command..An enumeration of backend languages, for the purpose of defining custom drawing commands. Note that several backends (e.g. EPS and PostScript) may share the same language, and therefore they are only represented once in this enumeration./PostScript (including EPS)0PDF1ASCII (for debugging)2The Draw monad.3Terminate with a result.4Write a command and continue.54Block structure. Perform the commands of the outer 2L in a temporary copy of the graphics state, then continue with the inner 2! in the original graphics state.6=An abstract data type describing individual drawing commands.7Set the current path to empty.8-Start a new subpath at the given coordinates.9.Append a straight line to the current subpath.:Append a Bezier curve segment.;Close the current subpath.<(Use the current path as a clipping path.="Stroke and clear the current path.> Fill and clear the current path.?+Fill and stroke and clear the current path.@Text.ASet current line width.BSet current color.C$Translate current coordinate system.D$Scale the current coordinate system.E%Rotate the current coordinate system.F&A human-readable comment, not renderedGA subroutine is a composite drawing command. In addition to a default definition that works for any backend, it can also have optional specialized definitions for particular backends.HThe Document monad.ITerminate with a result.J/Page with bounding box known at the beginning.K)Page with bounding box known at the end.LA real number representing text alignment. 0 = left aligned, 0.5 = centered, 1 = right aligned. Intermediate values are also possible. For example, an alignment value of 0.25 means one quarter of the way between left aligned and right aligned.MUA data type describing a scaled font. This consists of a base font and a point size.OA type representing font metrics for a given base font. The first component is the default width of characters; the second component is a map from characters to widths.P_A enumeration type for base fonts. For the time being, we only offer TimesRoman and Helvetica.SThe type of colors.TORed, green and blue components, in the range from 0.0 (dark) to 1.0 (bright).U:Gray value, in the range from 0.0 (black) to 1.0 (white).V The type of y -coordinates.W The type of x -coordinates.X(Define a font metric for each base font.YFont metrics for TimesRoman.ZFont metrics for Helvetica.[5Look up the width of a character in the given metric.\3Look up with width of a string in the given metric.](Return the nominal point size of a font.^7Return the width of the given string in the given font._Left alignment.`Centered alignment.aRight alignment.b(Skip document without rendering. cGCreate a page of the given bounding box, containing the given drawing.doCreate a page containing the given drawing, with the bounding box computed at the end of the drawing routines.e)End the page with the given bounding box.fWrite the given command to the 2 monad.gCreate a new subroutine.hWrite a block to the 2 monad.i$Skip draw actions without rendering.jSet the current path to empty.kStart a new subpath at (x,y). The point (x,y) becomes the current point.lRExtend the current subpath by a straight line segment from the current point to (x,y). The point (x,y) becomes the current point.mm x1 y1 x2 y2 x yT: Extend the current subpath by a Bezier curve segment from the current point to (x,y), with control points (x1,y1) and (x2,y2). The point (x,y) becomes the current point.n1Close the current subpath. If necessary, connect the subpath's final and initial points by a straight line segment. Note that a closed path is rendered differently than a non-closed path whose initial and final points coincide, because in the latter case, the endpoints are capped rather than mitered.oNUse the current path as a clipping path. The non-zero winding number determines which points lie "inside" the path. All subsequent drawing operations only paint inside the clipping path. This operation implicitly resets the current path to empty. There is no way to undo this operation, except by enclosing it in the local block.pStroke the current path, using the current line color, line width, and other graphics parameters. This operation implicitly resets the current path to empty.qkFill the current path, using the given color. This operation implicitly resets the current path to empty. rFill the current path, using the given color; also stroke the path using the current line color. This operation implicitly resets the current path to empty.ss a f c x0 y0 x1 y1 b s;: Write the given string on an imaginary line from point (x0,y0) to (x1,y1), using font f and color c. If the text is too wide to fit on the line, it is scaled down. Otherwise, it is aligned according to the alignment parameter a. The parameter bw specifies an additional offset by which to lower the text, with respect to the text's nominal size. For example, if b3=0, then the above-mentioned imaginary line from (x0,y0) to (x1,y10) coincides with the text's usual baseline. If bN=0.5, then this line approximately goes through the center of each character. images/textbox.pngt0Set the line width. The initial line width is 1.uGSet the current color for stroking. The initial stroke color is black.v,Translate the current coordinate system by (x,y).w(Scale the current coordinate system by (s,t ). Here, s is the scaling factor in the x-direction, and t is the scaling factor in the y -direction.x(Rotate the current coordinate system by angle(, measured counterclockwise in degrees.yInsert a human-readable comment in the content stream. This is for information only, and is not rendered in the graphical output.zjPerform a block of commands in a local copy of the graphics state. This is intended to be used like this: ) block $ do <<drawing commands>>{[Start a new subpath consisting of a circular arc segment. The arc segment is centered at (x,y), has radius r, and extends from angle a1 to angle a22, measured in degrees, counterclockwise from the x,-axis. The arc is drawn counterclockwise if a2 "e a1J, and clockwise otherwise. The final point becomes the new current point.|Like {, except append to the current subpath. If necessary, add a straight line segment from the current point to the starting point of the arc.}@Append a new closed subpath consisting of an oval centered at (x,y&), with horizontal and vertical radii rx and ry, respectively.~The common implementation of {, |, and }. The first parameter is a boolean flag indicating whether to append to an existing subpath or start a new subpath. The fourth and fifth parameter are the horizontal and vertical radius. x y w h: Draw a rectangle of width w and height h, starting from (x,y). If w and h are positive, then (x,y) is the lower left corner.&Define a custom PostScript definition.Define a custom PDF definition.!Define a custom ASCII definition. Look up an element in a list of ,s.SAn empty customization structure. Customizations should be specified by modifying , for example:  custom { creator = "MyApp 1.0" }Like ', but adds a newline character.7Write a value of any printable type, and add a newline.Isomorphically map a !0 computation to a pair of a string and a value.Important usage note: the / in the output is produced lazily, and before a5 is produced. To preserve laziness, do not evaluate a before the end of  has been reached.The inverse of .Run a ! computation in any %.Run a writer in the  monad by printing to a file.%Run a writer by printing to a string.Unbox a boxed item.EPrint a formatted value in the context of a boxed WriterMonad. Usage:#wprintf "%f %f" x y :: Boxed WriterIn any %, introduce a block in which  can be used. This has no computational overhead, i.e., is compiled to the identity operation; it exists only to please the type system, due to the fancy typing of .Wrap a filter around a !8 computation. This introduces a local block within the !t monad; all text written within the block is encoded through the given filter. Filters can be composed and nested.EA filter for performing "flate" (also known as "zlib") compression. Note: both the input and output strings are regarded as sequences of bytes, not characters. Any characters outside the byte range are truncated to 8 bits.Ensure that the last line of the string ends in a newline character, adding one if necessary. An empty string is considered to contain zero lines, so no newline character needs to be added. Render draw actions as ASCII.!Render drawing commands as ASCII.Render a document as ASCII.Render a document as ASCII. This is for debugging purposes only. The output is a sequence of drawing commands, rather than a graphical representation..Escape special characters in a string literal.&Remove newline characters in a string. The initial .Run function for the  monad.Get the bounding box.Add to the bounding box.Get the page count.Return the next page number."Render draw actions as PostScript.Set the color. Set the font.,Draw a single drawing command to PostScript. Render a document as PostScript.;Global PostScript definitions used by the rendering engine.Render pages as PostScript.URender document as PostScript. The first argument is a customization data structure.ORender a document as EPS. Since EPS only permits a single page of output, the  parameter is used to specify which page (of a potential multi-page document) should be printed. An error will be thrown if the page number was out of range.ONote: if the return value is not used, the remaining pages are lazily skipped.Render document as EPS. The first argument is a customization data structure, and the second argument is the number of the page to extract from the document..Escape special characters in a string literal. The initial  .Run function for the   monad.Get the file position.Add to the file position.TGet the number of allocated objects. Note that objects are allocated as 1, 2, ..., n; this function returns n.%Allocate an unused object identifier.3Add a cross reference to the cross reference table.#Retrieve the cross reference table.Get the page count.Return the next page number.Add a page to the page table.Retrieve the page table.-Look up the local font identifier for a font.Retrieve the font table.Clear the font table. A version of  tailored to the   monad.OThis allows certain global state updates within the local block. Specifically, updates to everything except the file position are propagated from the inner to the outer block. The outer block's file position is updated to reflect the encoded content's length. From the inner block's point of view, the file position starts from 0.pDefine an indirect PDF object with the given object id, which must have previously been uniquely obtained with .This can be used to define objects with forward references: first obtain an object id, then create references to the object, and finally define the object.It should be used like this: Oobj <- pdf_next_object ... pdf_deferred_object obj $ do <<object definition>>qDefine an indirect PDF object with a newly generated object id. Return the object id. This essentially combines  and 7 into a single function, and should be used like this: 5obj <- pdf_define_object $ do <<object definition>>mDefine a PDF stream object with the given object id, which must have previously been uniquely obtained with . It should be used like this: Mobj <- pdf_next_object ... pdf_deferred_stream obj $ do <<stream contents>>rDefine a PDF stream object with a newly generated object id. Return the object id. This should be used like this: 3obj <- pdf_define_stream $ do <<stream contents>>yDefine a compressed PDF stream object with the given object id, which must have previously been uniquely obtained with . It should be used like this: Sobj <- pdf_next_object ... pdf_deferred_flate_stream obj $ do <<stream contents>>>Create a direct object from a reference to an indirect object.yWrite one line in the cross reference table. This must be exactly 20 characters long, including the terminating newline.YFormat the cross reference table. Return the file position of the cross reference table.Set the fill color.Set the stroke color. Set the font. Render a drawing command to PDF.Render a draw action to PDF.ZRender pages as PDF. The first argument is a reference to the document's page tree node. Note: Acrobat reader cannot handle pages whose bounding box width or height exceed 200 inches (14400 points). Therefore, we automatically scale pages to be no greater than 199 inches.Render a document as PDF.NRender document as PDF. The first argument is a customization data structure.*Does the format require raw binary output?Render a document to the !H monad, using the given output format and customization data structure.]Render a document to a file, using the given output format and customization data structure.fRender a document to standard output, using the given output format and customization data structure._Render a document to a string, using the given output format and customization data structure.Render a document to the !& monad, using the given output format.;Render a document to a file, using the given output format.DRender a document to standard output, using the given output format.=Render a document to a string, using the given output format.   !$#"%'&()+*,-.10/25436GFEDCBA@?>=<;:987HKJILMNOPRQSUTVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~WVSTUPQROXYZ[\MN]^L_`aHIJKbcde6789:;<=>?@ABCDEFG2345fghijklmnopqrstuvwxyz{|}~./01,-()*+%&'!"#$      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKMNPQRSTUSafe;<=>?A4= ()*+2HLMNPQRSTUVW]^_`acdegjklmnopqrstuvwyz{|}=WVSTUPQRMN]^L_`aHcde2jklmn{|}pqrostuvwyz g()*+      !!"#$%&'())*+,,-./0123456789:;<=>?@ABCDEFGHIJKLLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~)easyrender-0.1.1.4-GAsgYxS8F50FVnX9YB0kV3Graphics.EasyRender.AuxiliaryGraphics.EasyRender.InternalGraphics.EasyRenderCurrymcurrymuncurry int_ceiling$fCurry(->)(,)res $fCurryb()b RenderFormat Format_PS Format_PDF Format_EPS Format_Debug PDFWriter RawPDFWriter PDF_State pdf_filepospdf_objpdf_xrefpdf_page pdf_pagetablepdf_font pdf_fonttableObjectFileposPSWriterPS_StatePage Boxed_Curry boxed_curry boxed_uncurryBoxedWriter Writer_ReturnWriter_PutChar Writer_PutStr WriterMonadwPutCharwPutStrCustomcreatorps_defs CustomDefLanguage Language_PS Language_PDFLanguage_ASCIIDraw Draw_Return Draw_Write Draw_Block DrawCommandNewpathMovetoLinetoCurveto ClosepathClipStrokeFill FillStrokeTextBox SetLineWidthSetColor TranslateScaleRotateComment SubroutineDocumentDocument_Return Document_PageDocument_Page_defer AlignmentFont FontmetricBasefont TimesRoman HelveticaColor Color_RGB Color_GrayYXmetricmetric_timesromanmetric_helvetica char_metric string_metric nominalsize text_width align_left align_center align_right document_skipnewpage newpage_deferendpage draw_writedraw_subroutine draw_block draw_skipnewpathmovetolinetocurveto closepathclipstrokefill fillstroketextbox setlinewidthsetcolor translatescalerotatecommentblockarc arc_appendoval arc_internal rectangle custom_ps custom_pdf custom_ascii custom_lookupcustom wPutStrLnwprintwriter_to_pairpair_to_writer run_writerwriter_to_filewriter_to_stringunboxwprintf with_printf with_filter flate_filter ensure_nl draw_to_asciicommand_to_asciidocument_to_ascii render_ascii ps_escape remove_nlps_state_empty pswriter_run ps_get_bbox ps_add_bboxps_get_pagecount ps_next_page draw_to_ps color_to_ps font_to_ps command_to_psdocument_to_psglobal_ps_defs pages_to_psrender_ps_customdocument_to_epsrender_eps_custom pdf_escapepdf_state_empty pdfwriter_runpdf_get_filepospdf_inc_filepospdf_get_objcountpdf_next_object pdf_add_xref pdf_get_xrefpdf_get_pagecount pdf_next_pagepdf_add_pagetablepdf_get_pagetable pdf_find_fontpdf_get_fonttablepdf_clear_fonttablewith_filter_pdfpdf_deferred_objectpdf_define_objectpdf_deferred_streampdf_define_streampdf_deferred_flate_streamobjrefwprintf_xref_entry wprintf_xreffillcolor_to_pdfstrokecolor_to_pdf font_to_pdfcommand_to_pdf draw_to_pdf pages_to_pdfdocument_to_pdfrender_pdf_customis_binary_format render_customrender_custom_filerender_custom_stdoutrender_custom_stringrender render_file render_stdout render_string $fFunctorDraw$fApplicativeDraw $fMonadDraw$fFunctorDocument$fApplicativeDocument$fMonadDocument$fWriterMonadIO$fWriterMonadWriter$fFunctorWriter$fApplicativeWriter $fMonadWriter$fMonadStatesBoxed$fWriterMonadBoxed$fFunctorBoxed$fApplicativeBoxed $fMonadBoxed$fBoxed_Curry(->)(,)mres$fBoxed_CurryBoxed()ma$fWriterMonadStateT$fWriterMonadStateT0 $fShowColor$fShowBasefont $fShowFont$fShowLanguage $fEqLanguage $fOrdLanguage$fShowCustomDef$fShowDrawCommand $fShowDraw$fShowRenderFormatbaseGHC.Realceiling integer-gmpGHC.Integer.TypeIntegerGHC.BaseStringghc-prim GHC.TypesIO