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

Copyright(c) 2012 diagrams-lib team (see LICENSE)
LicenseBSD-style (see LICENSE)
Safe HaskellNone



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



data a :& b infixl 7 Source

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


a :& b infixl 7 


(Eq a, Eq b) => Eq ((:&) a b) 
(Ord a, Ord b) => Ord ((:&) a b) 
(Show a, Show b) => Show ((:&) a b) 
Coordinates ((:&) a b) 
type FinalCoord ((:&) a b) = b 
type PrevDim ((:&) a b) = a 
type Decomposition ((:&) a b) = (:&) 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) = ...

Minimal complete definition

(^&), coords

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 :&.


(^&) :: PrevDim c -> FinalCoord c -> c infixl 7 Source

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 :: V3

Note that ^& is left-associative.

pr :: PrevDim c -> FinalCoord c -> c Source

Prefix synonym for ^&. pr stands for pair of PrevDim, FinalCoord

coords :: c -> Decomposition c Source

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


Coordinates (V4 n) 
Coordinates (V3 n) 
Coordinates (V2 n) 
Coordinates (a, b) 
Coordinates (v n) => Coordinates (Point v n) 
Coordinates ((:&) a b) 
Coordinates (a, b, c) 
Coordinates (a, b, c, d)