Copyright  (c) Archibald Neil MacDonald 2020 

License  BSD3 
Maintainer  FortOyer@hotmail.co.uk 
Stability  experimental 
Portability  POSIX 
Safe Haskell  None 
Language  Haskell2010 
This module contains all commands used to create, move and manipulate a turtle.
Synopsis
 data Turtle
 type Point = (Float, Float)
 makeTurtle :: WorldCommand Turtle
 makeTurtle' :: Point > Float > Color > WorldCommand Turtle
 clear :: WorldCommand ()
 sleep :: Float > WorldCommand ()
 forward :: Float > TurtleCommand ()
 fd :: Float > TurtleCommand ()
 backward :: Float > TurtleCommand ()
 bk :: Float > TurtleCommand ()
 left :: Float > TurtleCommand ()
 lt :: Float > TurtleCommand ()
 right :: Float > TurtleCommand ()
 rt :: Float > TurtleCommand ()
 circle :: Float > TurtleCommand ()
 arc :: Float > Float > TurtleCommand ()
 goto :: Point > TurtleCommand ()
 setPosition :: Point > TurtleCommand ()
 home :: TurtleCommand ()
 setHeading :: Float > TurtleCommand ()
 setSpeed :: Float > TurtleCommand ()
 setRotationSpeed :: Float > TurtleCommand ()
 stamp :: TurtleCommand ()
 position :: TurtleCommand Point
 heading :: TurtleCommand Float
 speed :: TurtleCommand Float
 rotationSpeed :: TurtleCommand Float
 penColor :: TurtleCommand Color
 penDown :: TurtleCommand Bool
 penSize :: TurtleCommand Float
 representation :: TurtleCommand Picture
 visible :: TurtleCommand Bool
 branch :: TurtleCommand a > TurtleCommand a
 setPenColor :: Color > TurtleCommand ()
 setPenDown :: Bool > TurtleCommand ()
 setPenSize :: Float > TurtleCommand ()
 setRepresentation :: Picture > TurtleCommand ()
 setVisible :: Bool > TurtleCommand ()
 east :: Float
 north :: Float
 west :: Float
 south :: Float
Types
The Turtle that is drawn on the canvas! Create a new turtle using
makeTurtle
.
WorldCommand commands.
Creating a turtle.
:: Point  Initial position of the turtle. 
> Float  Initial heading of the turtle. 
> Color  Color of the turtle and the turtle's pen. 
> WorldCommand Turtle  The generated turtle. 
This variant of makeTurtle
takes a starting position, a starting
orientation, and a color to apply to the turtle and the turtle's pen.
myCommand :: WorldCommand () myCommand = do t1 < makeTurtle' (0, 0) 0 green t2 < makeTurtle' (0, 0) 90 red t1 >/> forward 90 <> t2 >/> forward 90
See makeTurtle
.
Canvas commands.
clear :: WorldCommand () Source #
Clears all drawings form the canvas. Does not alter any turtle's state.
sleep :: Float > WorldCommand () Source #
Sleep for a given amount of time in seconds. When sleeping no animation
runs. A negative value will be clamped to 0
.
TurtleCommand commands.
Movement commands.
:: Float  Distance to move the turtle. 
> TurtleCommand () 
Move the turtle forward by the specified distance
, in the direction the
turtle is headed.
:: Float  Distance to move the turtle. 
> TurtleCommand () 
Move the turtle backward by the specified distance
, in the direction the
turtle is headed.
:: Float  Rotation amount to apply to turtle. 
> TurtleCommand () 
Turn a turtle left by the given degrees amount.
:: Float  Rotation amount to apply to turtle. 
> TurtleCommand () 
Turn a turtle right by the given degrees amount.
:: Float  Radius of the circle. 
> TurtleCommand () 
Draw a circle with a given radius
. The center is radius
units left of
the turtle if positive. Otherwise radius
units right of the turtle
if negative.
The circle is drawn in an anticlockwise direction if the radius is positive, otherwise, it is drawn in a clockwise direction.
Circle is an alias for circle r = arc r 360
.
:: Float  Radius of the circle. 
> Float  Angle to travel in degrees.
For example: 
> TurtleCommand () 
Draw an arc with a given radius
. The center is radius
units left of the
turtle if positive. Otherwise radius
units right of the turtle if
negative.
The arc is drawn in an anticlockwise direction if the radius is positive, otherwise, it is drawn in a clockwise direction.
:: Point  Position to warp to. 
> TurtleCommand () 
Warps the turtle to a new position. The turtle jumps to this new position with no animation. If the pen is down then a line is drawn.
This does not affect the turtle's heading.
setPosition :: Point > TurtleCommand () Source #
Alias of goto
.
home :: TurtleCommand () Source #
Warps the turtle to its starting position (0, 0)
and resets the
orientation to north
(90
degrees). No line is drawn moving the turtle.
:: Float  Heading to apply. 
> TurtleCommand () 
Sets the turtle's heading. See heading
.
:: Float  New rotation speed. 
> TurtleCommand () 
Sets the turtle's rotation speed.
See rotationSpeed
.
Styling commands.
stamp :: TurtleCommand () Source #
Stamp a copy of the turtle shape onto the canvas at the current turtle position.
Query turtle's state.
:: TurtleCommand Point  Returned current point. 
Returns the turtle's current position.
Default (starting) position is (0, 0)
.
:: TurtleCommand Float  Returned heading as angle in degrees. 
Returns the turtle's heading.
0
is along the positive xaxis, going anticlockwise. So:
 East is
0
degrees.  North is
90
degrees.  West is
180
degrees.  South is
270
degrees.
The default heading is North (90
degrees).
:: TurtleCommand Float  Speed of turtle. 
Returns the turtle's current speed.
Speed is is distance
per second.
A speed of 0
is equivalent to no animation being performed and instant
movement.
The default value is 200
.
:: TurtleCommand Float  Rotation speed of turtle. 
Returns the turtle's current rotation speed.
Rotation speed is is the speed in seconds it takes to do a full revolution.
A speed of 0
is equivalent to no animation being performed and instant
rotation.
The default value is 20
.
:: TurtleCommand Color  Returned current pen color. 
Returns the turtle's pen color.
The color of the turtle's pen.The default color is black
.
:: TurtleCommand Bool  True if pen is down, false if not. 
Returns whether the turtle's pen is down.
When the turtle's pen is down it will draw a line when it moves.
The default value is True
.
:: TurtleCommand Float  Size of turtle's pen. 
Returns the turtle's pen size.
Defaults to 2
.
representation :: TurtleCommand Picture Source #
Gets the turtle's representation as a Picture
.
:: TurtleCommand Bool 

Returns whether the turtle is visible.
The default value is True
.
Mutate turtle's state.
branch :: TurtleCommand a > TurtleCommand a Source #
Given a command, runs the command, then resets the turtle's state back to what the state was before the command was run.
:: Color  New pen color to apply 
> TurtleCommand () 
Set the turtle's pen color.
See penColor
.
:: Bool  New state for pen flag. True for down. False for up. 
> TurtleCommand () 
Sets the turtle's pen to down or up.
See penDown
.
:: Float  New size for turtle's pen. 
> TurtleCommand () 
Sets the turtle's pen size.
See penSize
.
:: Picture  Picture to apply. 
> TurtleCommand () 
Sets the turtle's representation to a Picture
.
See representation
.
For example, to set the turtle as a red circle:
import Graphics.WorldTurtle import qualified Graphics.Gloss.Data.Picture as G myCommand :: TurtleCommand () myCommand = do setPenColor red setRepresentation (G.color red $ G.circleSolid 10) forward 90
:: Bool  New state for visible flag. 
> TurtleCommand () 
Sets the turtle's visibility.
See visible
.