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

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

Diagrams.Located

Description

"Located" things, i.e. things with a concrete location: intuitively, `Located a ~ (a, Point)`. Wrapping a translationally invariant thing (e.g. a `Segment` or `Trail`) in `Located` pins it down to a particular location and makes it no longer translationally invariant.

Synopsis

- data Located a = Loc {
  - loc :: Point (V a) (N a)
  - unLoc :: a
  }
- at :: a -> Point (V a) (N a) -> Located a
- viewLoc :: Located a -> (Point (V a) (N a), a)
- mapLoc :: SameSpace a b => (a -> b) -> Located a -> Located b
- located :: SameSpace a b => Lens (Located a) (Located b) a b
- _loc :: Lens' (Located a) (Point (V a) (N a))

# Documentation

data Located a Source

"Located" things, i.e. things with a concrete location: intuitively, `Located a ~ (Point, a)`. Wrapping a translationally invariant thing (e.g. a `Segment` or `Trail`) in `Located` pins it down to a particular location and makes it no longer translationally invariant.

`Located` is intentionally abstract. To construct `Located` values, use `at`. To destruct, use `viewLoc`, `unLoc`, or `loc`. To map, use `mapLoc`.

Much of the utility of having a concrete type for the `Located` concept lies in the type class instances we can give it. The `HasOrigin`, `Transformable`, `Enveloped`, `Traced`, and `TrailLike` instances are particularly useful; see the documented instances below for more information.

Constructors

Loc |

Fields

loc :: Point (V a) (N a)

  Project out the location of a `Located` value.

unLoc :: a

  Project the value of type `a` out of a `Located a`, discarding the location.

Instances

(Eq (V a (N a)), Eq a) => Eq (Located a) Source |
(Ord (V a (N a)), Ord a) => Ord (Located a) Source |
(Read (V a (N a)), Read a) => Read (Located a) Source |
(Show (V a (N a)), Show a) => Show (Located a) Source |
Enveloped a => Juxtaposable (Located a) Source |
Enveloped a => Enveloped (Located a) Source | The envelope of a `Located a` is the envelope of the `a`, translated to the location.
(Traced a, Num (N a)) => Traced (Located a) Source | The trace of a `Located a` is the trace of the `a`, translated to the location.
Qualifiable a => Qualifiable (Located a) Source |
(Additive (V a), Num (N a), Transformable a) => Transformable (Located a) Source | Applying a transformation `t` to a `Located a` results in the transformation being applied to the location, and the linear portion of `t` being applied to the value of type `a` (i.e. it is not translated).
(Num (N a), Additive (V a)) => HasOrigin (Located a) Source | `Located a` is an instance of `HasOrigin` whether `a` is or not. In particular, translating a `Located a` simply translates the associated point (and does not affect the value of type `a`).
(Metric v, OrderedField n) => Reversing (Located (Trail v n)) | Same as `reverseLocTrail`.
(Metric v, OrderedField n) => Reversing (Located (Trail' l v n)) | Same as `reverseLocLine` or `reverseLocLoop`.
(InSpace v n a, Fractional n, HasArcLength a, (~) (* -> *) (Codomain a) v) => HasArcLength (Located a) Source |
(InSpace v n a, Fractional n, Parametric a, Sectionable a, (~) (* -> *) (Codomain a) v) => Sectionable (Located a) Source |
(InSpace v n a, EndValues a, (~) (* -> *) (Codomain a) v) => EndValues (Located a) Source |
(DomainBounds t, EndValues (Tangent t)) => EndValues (Tangent (Located t)) Source |
DomainBounds a => DomainBounds (Located a) Source |
(InSpace v n a, Parametric a, (~) (* -> *) (Codomain a) v) => Parametric (Located a) Source |
Parametric (Tangent t) => Parametric (Tangent (Located t)) Source |
TrailLike t => TrailLike (Located t) Source | `Located` things are trail-like as long as the underlying type is. The location is taken to be the location of the input located trail.
ToPath (Located [Segment Closed v n]) Source |
ToPath (Located (Segment Closed v n)) Source |
ToPath (Located (Trail v n)) Source |
ToPath (Located (Trail' l v n)) Source |
(Metric v, Metric u, OrderedField n, (~) * r (Located (Trail u n))) => Deformable (Located (Trail v n)) r Source |
(LinearMappable a b, (~) * (N a) (N b), (~) * r (Located b)) => AffineMappable (Located a) r Source |
(LinearMappable a b, (~) * r (Located b)) => LinearMappable (Located a) r Source |
Cons (Path v n) (Path v' n') (Located (Trail v n)) (Located (Trail v' n')) |
Snoc (Path v n) (Path v' n') (Located (Trail v n)) (Located (Trail v' n')) |
Each (Path v n) (Path v' n') (Located (Trail v n)) (Located (Trail v' n')) |
type V (Located a) = V a Source |
type N (Located a) = N a Source |
type Codomain (Located a) = Point (Codomain a) Source |

at :: a -> Point (V a) (N a) -> Located a infix 5 Source

Construct a `Located a` from a value of type `a` and a location. `at` is intended to be used infix, like `x `at` origin`.

viewLoc :: Located a -> (Point (V a) (N a), a) Source

Deconstruct a `Located a` into a location and a value of type `a`. `viewLoc` can be especially useful in conjunction with the `ViewPatterns` extension.

mapLoc :: SameSpace a b => (a -> b) -> Located a -> Located b Source

`Located` is not a `Functor`, since changing the type could change the type of the associated vector space, in which case the associated location would no longer have the right type. `mapLoc` has an extra constraint specifying that the vector space must stay the same.

(Technically, one can say that for every vector space `v`, `Located` is a little-f (endo)functor on the category of types with associated vector space `v`; but that is not covered by the standard `Functor` class.)

located :: SameSpace a b => Lens (Located a) (Located b) a b Source

A lens giving access to the object within a `Located` wrapper.

_loc :: Lens' (Located a) (Point (V a) (N a)) Source

Lens onto the location of something `Located`.