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

Copyright | (c) 2012 diagrams-lib team (see LICENSE)
License | BSD-style (see LICENSE)
Maintainer | diagrams-discuss@googlegroups.com
Safe Haskell | None
Language | Haskell2010

Diagrams.Coordinates

Description

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

Synopsis

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

# Documentation

data a :& b infixl 7 Source

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

Constructors

a :& b infixl 7 |

Instances

(Eq a, Eq b) => Eq ((:&) a b) Source |
(Ord a, Ord b) => Ord ((:&) a b) Source |
(Show a, Show b) => Show ((:&) a b) Source |
Coordinates ((:&) a b) Source |
type FinalCoord ((:&) a b) = b Source |
type PrevDim ((:&) a b) = a Source |
type Decomposition ((:&) a b) = (:&) a b Source |

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

Methods

(^&) :: 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.

Instances

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