Safe Haskell | Safe-Inferred |
---|---|

Language | Haskell2010 |

This module provides a monadic interface to build `TPath`

values.
It does so using `PathBuilder`

s. The construction of a `PathBuilder`

is equivalent to the construction of a `TPath`

by hand, but with
a sometimes more convenient syntax.

For example, this path corresponds to a triangle:

trianglePath :: TPath trianglePath = bpath (pointAtXY (-1) 0) $ do line $ pointAtXY 1 0 line $ pointAtXY 0 1 pcycle

The equivalent syntax created by hand would be:

trianglePath :: TPath trianglePath = Cycle $ Start (pointAtXY (-1) 0) ->- pointAtXY 1 0 ->- pointAtXY 0 1

The `Cycle`

constructor at the beginning may seem unintuitive, since we are building
the path from left to right. In the `PathBuilder`

monad, the instructions are always
written in order.

- data PathBuilder a
- bpath :: TPoint -> PathBuilder a -> TPath
- line :: TPoint -> PathBuilder ()
- pcycle :: PathBuilder ()
- rectangle :: TPoint -> PathBuilder ()
- circle :: Double -> PathBuilder ()
- ellipse :: Double -> Double -> PathBuilder ()
- node :: LaTeX -> PathBuilder ()
- grid :: [GridOption] -> TPoint -> PathBuilder ()

# Path builder

data PathBuilder a Source

bpath :: TPoint -> PathBuilder a -> TPath Source

Build a path using a *starting point* and a `PathBuilder`

.

# Builder functions

line :: TPoint -> PathBuilder () Source

Line from the current point to the given one.

pcycle :: PathBuilder () Source

rectangle :: TPoint -> PathBuilder () Source

Rectangle with the current point as one cornder and the given point as the opposite corner.

circle :: Double -> PathBuilder () Source

Circle with the given radius centered at the current point.

:: Double | Half width of the ellipse. |

-> Double | Half height of the ellipse. |

-> PathBuilder () |

Ellipse with width and height described by the arguments and centered at the current point.

node :: LaTeX -> PathBuilder () Source

Text centered at the current point.

grid :: [GridOption] -> TPoint -> PathBuilder () Source