diagrams-lib-0.7.1.1: Embedded domain-specific language for declarative graphics

Maintainer | diagrams-discuss@googlegroups.com
Safe Haskell | Safe-Inferred

Diagrams.Coordinates

Description

Nice syntax for constructing and pattern-matching on literal points and vectors.

NOTE: to avoid clashing with the '(&)' operator from the `lens` package, this module is not re-exported by Diagrams.Prelude. To make use of the contents of this module, you must explicitly import it.

Synopsis

- data a :& b = a :& b
- class Coordinates c where
  - type FinalCoord c :: *
  - type PrevDim c :: *
  - type Decomposition c :: *
  - (&) :: PrevDim c -> FinalCoord c -> c
  - coords :: c -> Decomposition c

# Documentation

data a :& b Source

A pair of values, with a convenient infix (left-associative) data constructor.

Constructors

a :& b |

Instances

(Eq a, Eq b) => Eq (:& a b) |
(Ord a, Ord b) => Ord (:& a b) |
(Show a, Show b) => Show (:& a b) |

class Coordinates c where Source

Types which are instances of the `Coordinates` class can be constructed using `&` (for example, a three-dimensional vector could be constructed by `1 & 6 & 3`), and deconstructed using `coords`. A common pattern is to use `coords` in conjunction with the `ViewPatterns` extension, like so:

     foo :: Vector3 -> ...
     foo (coords -> x :& y :& z) = ...

Associated Types

type FinalCoord c :: *Source

The type of the final coordinate.

type PrevDim c :: *Source

The type of everything other than the final coordinate.

type Decomposition c :: *Source

Decomposition of `c` into applications of `:&`.

Methods

(&) :: PrevDim c -> FinalCoord c -> cSource

Construct a value of type `c` by providing something of one less dimension (which is perhaps itself recursively constructed using `(&)`) and a final coordinate. For example,

     2 & 3 :: P2
     3 & 5 & 6 :: R3

Note that `&` is left-associative.

coords :: c -> Decomposition cSource

Decompose a value of type `c` into its constituent coordinates, stored in a nested `(:&)` structure.

Instances

Coordinates R2 |
Coordinates R3 |
Coordinates v => Coordinates (Point v) |
Coordinates (a, b) |
Coordinates (a, b, c) |
Coordinates (a, b, c, d) |