!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./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 T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h ijklmnopqrstuvwxyz{|}~     GHCunstablestephen.tetley@gmail.com0:Vertical alignment - align to the left, center or bottom. ;Horizontal alignment - align to the top, center or bottom. The center of a picture.   a `over` b Place 'picture' a over b. The idea of over here is in = terms z-ordering, nither picture a or b are actually moved.  a `under` b  Similarly under! draws the first picture behind  the second but move neither. under was previously beneath. *Move in both the horizontal and vertical. Extract the top-left corner.  Extract the top-right corner. ! Extract the bottom-left corner. "!Extract the bottom-right corner. #$%&' 2Draw a centered over b - a is moved, b is static.  a `centerOver` b   was previously the (-@ -) operator.  a `nextToH` b Horizontal composition - move b, placing it to the right  of a.  $ was previously the (->-) operator.  a `nextToV` b Vertical composition - move b, placing it below a. nextToV was previously the (- -) operator. )Place the picture at the supplied point.  was previous the at operator. *Center the picture at the supplied point.  xs `stackOver` x Stack the list of pictures xs   x. >Note, the first picture in the list is drawn at the top, all $ the pictures in the list are drawn 'over' x. No pictures  are moved  [p1,p2,p3]  p4 => [p1,p2,p3,p4] x `zconcat` xs  Concatenate x over the list of pictures xs. x. is drawn at the top. No pictures are moved.  p1  [p2,p3,p4] => [p1,p2,p3,p4]Concatenate the list pictures xs horizontally with nextToH  starting at x. !Concatenate the list of pictures xs vertically with nextToV  starting at x. 9Stack pictures centered ontop of each other - the first > picture in the list is drawn at the top, last picture is on  drawn at the bottom.  hspace n a b Horizontal composition - move b, placing it to the right  of a with a horizontal gap of n separating the pictures.  vspace n a b Vertical composition - move b, placing it below a with a  vertical gap of n separating the pictures.  hsep n x xs !Concatenate the list of pictures xs horizontally with  hspace starting at x&. The pictures are interspersed with  spaces of n units.  vsep n x xs !Concatenate the list of pictures xs vertically with  vspace starting at x&. The pictures are interspersed with  spaces of n units. ( alignH align a b Horizontal composition - move b, placing it to the right  of a0 and align it with the top, center or bottom of a.  alignV align a b Vertical composition - move b, placing it below a 0 and align it with the left, center or right of a.  alignHSep align sep a b !Spacing version of alignH - move b to the right of a  separated by sep units, align b according to align.  alignHSep align sep a b !Spacing version of alignV - move b below a  separated by sep units, align b according to align.  Variant of % that aligns the pictures as well as  concatenating them.  Variant of % that aligns the pictures as well as  concatenating them.  Variant of hsep% that aligns the pictures as well as ! concatenating and spacing them.  Variant of vsep% that aligns the pictures as well as ! concatenating and spacing them. !  !  !  GHCunstablestephen.tetley@gmail.com!Version number  (0,5,0) !!!GHC unstablestephen.tetley@gmail.com"#$%&'()*+,-./0123456789:"#$%&'()*+,-./0123456789:.*+,-/%&'()"#$0123546789:"#$#$%&'()&'()*+,-+,-./0123456789:GHChighly unstable)Stephen Tetley <stephen.tetley@gmail.com>;<=>;<=>;<=>;<=>GHChighly unstable)Stephen Tetley <stephen.tetley@gmail.com> ?@ABCDEFGHIJK ?@ABCDEFGHIJK ?@ABCDEFGHIJK ?@ABCDEFGHIJKGHCunstablestephen.tetley@gmail.com LMNOPQRS6velo consumes the list as per map, but builds it back , as a Hughes list - so items can be dropped  replaced, repeated, etc... TUV LMNOPQRSTUV LMNOPQRSTUV LMNOPQRSTUVGHC highly unstablestephen.tetley@gmail.comWXYY : ' num_points * radius * center -> [point]  ZZ :  ypos * step * (x0,x1) -> [point]  8Generate points in a horizontal line between x0 and x1. >Note - the step increment is w.r.t. 0 rather than x0. x0 and $ x1 are just the range. An example:  hpoints 0 10 (5,35)  [P2 10 0, P2 20 0, P2 30 0] [[ :  xpos * step * (y0,y1) -> [point]  6Generate points in a vertical line between y0 and y1. >Note - the step increment is w.r.t. 0 rather than y0. y0 and $ y1 are just the range. An example:  vpoints 5 100 (50,500) * [P2 5 100, P2 5 200, P2 5 300, P2 5 400] )*+WXYZ[WXYZ[WXYZ[GHC with TypeFamilies and morehighly unstable)Stephen Tetley <stephen.tetley@gmail.com>8\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~8\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~8\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~8\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ GHC with TypeFamilies and morehighly unstable)Stephen Tetley <stephen.tetley@gmail.com>      !"#$%&      !"#$%&      !"#$%&      !"#$%& GHC with TypeFamilies and morehighly unstable)Stephen Tetley <stephen.tetley@gmail.com>,-./'Line in equational form, i.e. Ax + By + C = 0. 0123(456)*+,-.7/89:01:Calculate the counter-clockwise angle between two points  and the x-axis. '()*+,-./01 )*(+',-./01 '()**+,-./01 GHChighly unstable)Stephen Tetley <stephen.tetley@gmail.com>#23456789:;<=>?@ABCDEFGHIJK(Turn a BasicPath into an ordinary Path. <An empty path returns Nothing - the path representation in = Wumpus-Core does not allow empty paths - a path must always  have at least start point. 9Assumes path is properly formed - i.e. end point of one : segment is the same point as the start point of the next  segment. L;< Jens Gravesen'$s bezier arc-length approximation. =Note this implementation is parametrized on error tolerance. =>?midpoint between two points M"Curve subdivision via de Casteljau' s algorithm. N2subdivide with an affine weight along the line... @23456789:;<=>?@ABCDEFGHIJKLMNC?@AB<>=6789:;2345DIJEFGHKLMN23453456789:;789:;<>==>?@AB@ABCDEFGHIJKLMN GHChighly unstable)Stephen Tetley <stephen.tetley@gmail.com>OPABCDEFQRGHSTUIVW OPQRSTUVW POQRSTUVW OPQRSTUVW GHC with TypeFamilies and morehighly unstable)Stephen Tetley <stephen.tetley@gmail.com>XYZ[\]^_`ab:A Mark is consider to be the height of a lowercase letter  in the current font. c7textDimensions : text -> DrawingAttr -> (width,height) JKLMdefghXYZ[\]^_`abcdefghXYZ[\]^_`abcdefhgXYZ[\]YZ[\]^_`abcdefghGHC unstablestephen.tetley@gmail.comijklijklijklijkjklGHC highly unstablestephen.tetley@gmail.com#mnopqrstuvwxy8Note - this representation allows for zero, one or more & Primitives to be collected together. zComposition operator...  cc f g = \x y -> f x (g x y) {Reverse application. |8Note - a Picture cannot be empty whereas a Graphic can. ( Hence this function returns via Maybe. }Unsafe version of | - this function throws % an error when the graphic is empty. ~Lift a Primitive to a Graphic The empty graphic. "Text should not contain newlines. Note the supplied point is the ' left-baseline'.  Vector is applied to the point. Supplied point is center. Supplied point is center. NSupplied point is  bottom-left.  : / stroked_props * num_subs * radius -> GraphicF  /Draw a stroked circle made from Bezier curves. num_subs is * the number of subdivisions per quadrant. >The result is a HOF (GraphicF :: Point -> Graphic) where the  point is the center.  : , fill_props * num_subs * radius -> GraphicF  .Draw a filled circle made from Bezier curves. num_subs is * the number of subdivisions per quadrant. >The result is a HOF (GraphicF :: Point -> Graphic) where the  point is the center.  is drawn with Wumpus-Core's ellipse primitive. 5This is a efficient representation of circles using  PostScript's arc or SVG's circle in the generated : output. However, stroked-circles do not draw well after < non-uniform scaling - the line width is scaled as well as  the shape. =For stroked circles that can be scaled, consider making the  circle from Bezier curves.  : : stroke_props * xstep * ystep * boundary_rect -> GraphicF  >The result is a HOF (GraphicF :: Point -> Graphic) where the  point is bottom-left.  : * stroke_props * boundary_rect -> GraphicF  >The result is a HOF (GraphicF :: Point -> Graphic) where the  point is bottom-left. "mnopqrstuvwxyz{|}~"yxwvz{|}~utpqrsonm"mnopqrsqrstuvwxyz{|}~GHChighly unstable)Stephen Tetley <stephen.tetley@gmail.com>OPQRSTUVGHC with TypeFamilies and morehighly unstable)Stephen Tetley <stephen.tetley@gmail.com>WXSupplied point is the center. YNote disk is filled. ZGHC unstablestephen.tetley@gmail.comGHC unstablestephen.tetley@gmail.com2ANode is drawn a a point supplied by the drawing  (e.g. current node of Turtle).  AGraphic param typically Point2 u or () <If the param is a point it will be supplied by the drawing  mode /5 drawing monad (e.g. the Turtle monad which supplies  the current point). ddGHC unstablestephen.tetley@gmail.com [\]^XYZ[\]^_`abcdefghijklGHC unstablestephen.tetley@gmail.com_`abcdefgh="#$%&'()*+,-./0123456789:XYZ[\]^_`abcdefghijklGHChighly unstable)Stephen Tetley <stephen.tetley@gmail.com>ijklmnopqrstuvwxyz{|}~GHChighly unstable)Stephen Tetley <stephen.tetley@gmail.com>#,Not working, though 161 should be uUpsilon. """GHC with TypeFamilies and morehighly unstable)Stephen Tetley <stephen.tetley@gmail.com>    GHC with TypeFamilies and morehighly unstable)Stephen Tetley <stephen.tetley@gmail.com>   GHC with TypeFamilies and morehighly unstable)Stephen Tetley <stephen.tetley@gmail.com>:Anchor on a border that can be identified with and angle.  textAnchor is the Bottom left corner  on the baseline.                         %GHC with TypeFamilies, GADTs and morehighly unstable)Stephen Tetley <stephen.tetley@gmail.com> !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./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 M N O P P Q R S T U V W X X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p p q r s t u v w x y z { | } ~       !"#$%&'()*+,-./0123456789:; < = > ? B @ A B C C D E F G H I J K L M N h O P P Q R S T U V W X YZ[\]^_`ab[cdefghijkklmnnopqrsstuvwxxyz{|}~)wumpus-basic-0.5.0Wumpus.Basic.PictureLanguageWumpus.Basic.VersionNumberWumpus.Basic.Monads.TurtleClassWumpus.Basic.Utils.CombinatorsWumpus.Basic.SafeFontsWumpus.Basic.Utils.HList Wumpus.Basic.Graphic.PointSupplyWumpus.Basic.Colour.X11ColoursWumpus.Basic.Colour.SVGColoursWumpus.Basic.Utils.IntersectionWumpus.Basic.Paths.BaseWumpus.Basic.Paths.Construction Wumpus.Basic.Graphic.DrawingAttr#Wumpus.Basic.Monads.DrawingCtxClassWumpus.Basic.GraphicWumpus.Basic.PathsWumpus.Basic.Dots.BaseWumpus.Basic.Monads.TraceClassWumpus.Basic.Monads.Drawing Wumpus.Basic.Monads.DrawingMonadWumpus.Basic.Monads.TurtleMonadWumpus.Basic.Text.LRTextWumpus.Basic.Text.LRSymbolWumpus.Basic.Arrows.TipsWumpus.Basic.ArrowsWumpus.Basic.AnchorsWumpus.Basic.DotsVAlignVRightVCenterVLeftHAlignHBottomHCenterHTop centerPointoverunder centerOvernextToHnextToVatPoint centeredAt stackOverzconcathcatvcatstackOverCenterhspacevspacehsepvsepalignHalignV alignHSep alignVSephcatAvcatAhsepAvsepAwumpus_basic_version TurtleScaleMxStepyStepTurtleMgetLocsetLoc getOrigin setOrigin TurtleConfigxstepystepCoord regularConfigaskStepssetsLocsetsLoc_resetLoc moveRightmoveLeftmoveUpmoveDownnextLinegetPos scaleCoordstarstar2star3star4 timesRoman timesItalic timesBoldtimesBoldItalic helveticahelveticaOblique helveticaBoldhelveticaBoldObliquecouriercourierOblique courierBoldcourierBoldObliquesymbolHemptyHwrapHconsHsnocHappendHunfoldrHveloHconcatHtoListH fromListHtwo_pihalf_pipolygonPointsVhpointsvpointsantique_white1antique_white2antique_white3antique_white4 aquamarine1 aquamarine2 aquamarine3 aquamarine4azure1azure2azure3azure4bisque1bisque2bisque3bisque4blue1blue2blue3blue4brown1brown2brown3brown4 burlywood1 burlywood2 burlywood3 burlywood4 cadet_blue1 cadet_blue2 cadet_blue3 cadet_blue4 chartreuse1 chartreuse2 chartreuse3 chartreuse4 chocolate1 chocolate2 chocolate3 chocolate4coral1coral2coral3coral4 cornsilk1 cornsilk2 cornsilk3 cornsilk4cyan1cyan2cyan3cyan4dark_goldenrod1dark_goldenrod2dark_goldenrod3dark_goldenrod4dark_olive_green1dark_olive_green2dark_olive_green3dark_olive_green4 dark_orange1 dark_orange2 dark_orange3 dark_orange4 dark_orchid1 dark_orchid2 dark_orchid3 dark_orchid4dark_sea_green1dark_sea_green2dark_sea_green3dark_sea_green4dark_slate_gray1dark_slate_gray2dark_slate_gray3dark_slate_gray4 deep_pink1 deep_pink2 deep_pink3 deep_pink4deep_sky_blue1deep_sky_blue2deep_sky_blue3deep_sky_blue4 dodger_blue1 dodger_blue2 dodger_blue3 dodger_blue4 firebrick1 firebrick2 firebrick3 firebrick4gold1gold2gold3gold4 goldenrod1 goldenrod2 goldenrod3 goldenrod4green1green2green3green4 honeydew1 honeydew2 honeydew3 honeydew4 hot_pink1 hot_pink2 hot_pink3 hot_pink4 indian_red1 indian_red2 indian_red3 indian_red4ivory1ivory2ivory3ivory4khaki1khaki2khaki3khaki4lavender_blush1lavender_blush2lavender_blush3lavender_blush4lemon_chiffon1lemon_chiffon2lemon_chiffon3lemon_chiffon4 light_blue1 light_blue2 light_blue3 light_blue4 light_cyan1 light_cyan2 light_cyan3 light_cyan4light_goldenrod1light_goldenrod2light_goldenrod3light_goldenrod4 light_pink1 light_pink2 light_pink3 light_pink4 light_salmon1 light_salmon2 light_salmon3 light_salmon4light_sky_blue1light_sky_blue2light_sky_blue3light_sky_blue4light_steel_blue1light_steel_blue2light_steel_blue3light_steel_blue4 light_yellow1 light_yellow2 light_yellow3 light_yellow4magenta1magenta2magenta3magenta4maroon1maroon2maroon3maroon4medium_orchid1medium_orchid2medium_orchid3medium_orchid4medium_purple1medium_purple2medium_purple3medium_purple4 misty_rose1 misty_rose2 misty_rose3 misty_rose4 navajo_white1 navajo_white2 navajo_white3 navajo_white4 olive_drab1 olive_drab2 olive_drab3 olive_drab4orange1orange2orange3orange4 orange_red1 orange_red2 orange_red3 orange_red4orchid1orchid2orchid3orchid4 pale_green1 pale_green2 pale_green3 pale_green4pale_turquoise1pale_turquoise2pale_turquoise3pale_turquoise4pale_violet_red1pale_violet_red2pale_violet_red3pale_violet_red4 peach_puff1 peach_puff2 peach_puff3 peach_puff4pink1pink2pink3pink4plum1plum2plum3plum4purple1purple2purple3purple4red1red2red3red4 rosy_brown1 rosy_brown2 rosy_brown3 rosy_brown4 royal_blue1 royal_blue2 royal_blue3 royal_blue4salmon1salmon2salmon3salmon4 sea_green1 sea_green2 sea_green3 sea_green4 seashell1 seashell2 seashell3 seashell4sienna1sienna2sienna3sienna4 sky_blue1 sky_blue2 sky_blue3 sky_blue4 slate_blue1 slate_blue2 slate_blue3 slate_blue4 slate_gray1 slate_gray2 slate_gray3 slate_gray4snow1snow2snow3snow4 spring_green1 spring_green2 spring_green3 spring_green4 steel_blue1 steel_blue2 steel_blue3 steel_blue4tan1tan2tan3tan4thistle1thistle2thistle3thistle4tomato1tomato2tomato3tomato4 turquoise1 turquoise2 turquoise3 turquoise4 violet_red1 violet_red2 violet_red3 violet_red4wheat1wheat2wheat3wheat4yellow1yellow2yellow3yellow4 alice_blue antique_whiteaqua aquamarineazurebeigebisqueblackblanched_almondblue blue_violetbrown burlywood cadet_blue chartreuse chocolatecoralcornflower_bluecornsilkcrimsoncyan dark_blue dark_cyandark_goldenrod dark_gray dark_green dark_grey dark_khaki dark_magentadark_olive_green dark_orange dark_orchiddark_red dark_salmondark_sea_greendark_slate_bluedark_slate_graydark_slate_greydark_turquoise dark_violet deep_pink deep_sky_bluedim_graydim_grey dodger_blue firebrick floral_white forest_greenfuchsia gainsboro ghost_whitegold goldenrodgraygreen green_yellowgreyhoneydewhot_pink indian_redindigoivorykhakilavenderlavender_blush lawn_green lemon_chiffon light_blue light_coral light_cyanlight_goldenrod_yellow light_gray light_green light_grey light_pink light_salmonlight_sea_greenlight_sky_bluelight_slate_graylight_slate_greylight_steel_blue light_yellowlime lime_greenlinenmagentamaroonmedium_aquamarine medium_blue medium_orchid medium_purplemedium_sea_greenmedium_slate_bluemedium_spring_greenmedium_turquoisemedium_violet_red midnight_blue mintcream mistyrosemoccasin navajo_whitenavyold_laceolive olive_draborange orange_redorchidpale_goldenrod pale_greenpale_turquoisepale_violet_red papaya_whip peach_puffperupinkplum powder_bluepurplered rosy_brown royal_blue saddle_brownsalmon sandy_brown sea_greenseashellsiennasilversky_blue slate_blue slate_gray slate_greysnow spring_green steel_bluetantealthistletomato turquoisevioletwheatwhite whitesmokeyellow yellow_greenLineEqn PointSlope LineSegmentLS pointSlopelineEqn toLineEqn findIntersect intersectionrectangleLineslangleLine line_startline_endCurve curve_start ctrl_point1 ctrl_point2 curve_endPathSegCurveSegLineSegPath path_length path_elementsPathF emptyPath addSegment segmentLength segmentStart segmentEndplinepcurve toPrimPath toPrimPathU subdivide subdividetCPathMPathrunPathexecPathlinetobeziertocurvetoverticalHorizontalhorizontalVertical DrawingAttr line_width font_props stroke_colour fill_colour standardAttr strokeAttrfillAttrtextAttr markHeighttextDimensionsthick ultrathickthinfontfacefontsize DrawingCtxM askDrawingCtxlocalCtxwithinModifiedCtx DRectangleLoc RectangleLoc DRectangle Rectangle rect_width rect_heightDPoint2TPoint2T DGraphicFGraphicFDGraphicGraphicccsupply drawGraphic drawGraphicUwrapGemptyGtextline straightLinestrokedRectanglefilledRectangle rectanglePath strokedCircle filledCircledisk positionWithdisphdispvdispgridborderwithinRectangleLocconnectS pathGraphicshortenshortenLshortenRmidpoint directionL directionRdotChardotTextdotHLinedotVLinedotXdotPlusdotCross dotDiamond dotFDiamonddotDisk dotSquare dotCircle dotPentagondotStar dotAsteriskdotOPlus dotOCross dotFOCrossTraceMtrace AConnector AFreeGraphicANodeAGraphicagDrawFagMakeFatnodenodeAtliftAFGconnectconnect_propsDrawingTDrawing runDrawing execDrawing runDrawingT execDrawingT TurtleDrawingTurtleTTurtle runTurtle runTurtleTrunTurtleDrawingexecTurtleDrawingTextMrunTextMtextcharkernnewlinebracketFontFacealphabetagammadeltaepsilonzetaetathetaiotakappalambdamunuxipirhosigmatauupsilonphichipsiomegauGammauDeltauThetauLambdauXiuPiuSigmauUpsilonuPhiuPsiuOmegatri90tri60tri45otri90otri60otri45barb90barb60barb45perpline arrowTri90 arrowTri60 arrowTri45 arrowOTri90 arrowOTri60 arrowOTri45 arrowBarb90 arrowBarb60 arrowBarb45 arrowPerp RadialAnchor radialAnchor TextAnchor baselineSWCardinalAnchor2 northeast southeast southwest northwestCardinalAnchornorthsoutheastwest CenterAnchorcenter DotAnchor rightBound leftBound bottomBoundtopBoundmovetoplefttopright bottomleft bottomrightleftmidrightmidtopmid bottommidmidptvecMoveinitialceilingiflooriIntersectionResult NoIntersect Contained Intersects _line_eqn_A _line_eqn_B _line_eqn_C_point_slope_point_point_slope_slope quadrantCheck intersect1lineF affineComb curveLengthgravesenLengthctrlPolyLength cordLength pointMidpointaffineCombinationgetMPath PathState current_point path_accumexchTiptip pcurveAngstd_line_width thick_lineultra_thick_line thin_line rectangle shortenSegL shortenLineL shortenSegR shortenLineRlineDirectionLlineDirectionRcurveDirectionLcurveDirectionR axialLine pathDiamondbkCircle getDrawingT getDrawinggetTurtleDrawing getTurtleT getTurtle TurtleState_turtle_origin_current_coord TGraphicF getTGraphicFgetTextMEnvVDistStxy_pos font_deschorizontal_disp acc_graphicIdxidx_xidx_yrightndown1consT setFontAttr setsFontAttr getFontAttrmakeDisplacement useSymbol tripointstriAngbarbAng arrowWidth triTipRight barbTipRightCardinalNWWWSWSSSEEENENN center_anchor radial_anchorcardinal_anchor circleAnchorradialCardinal rectCardinalrectangleAnchor