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

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

# 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 Fieldsloc :: Point (V a) (N a)Project out the location of a `Located` value.unLoc :: aProject the value of type `a` out of a `Located a`, discarding the location.

Instances

 (Eq (V a (N a)), Eq a) => Eq (Located a) (Ord (V a (N a)), Ord a) => Ord (Located a) (Read (V a (N a)), Read a) => Read (Located a) (Show (V a (N a)), Show a) => Show (Located a) Enveloped a => Juxtaposable (Located a) Enveloped a => Enveloped (Located a) The envelope of a `Located a` is the envelope of the `a`, translated to the location. (Traced a, Num (N a)) => Traced (Located a) The trace of a `Located a` is the trace of the `a`, translated to the location. Qualifiable a => Qualifiable (Located a) (Additive (V a), Num (N a), Transformable a) => Transformable (Located a) 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) `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) (InSpace v n a, Fractional n, Parametric a, Sectionable a, (~) (* -> *) (Codomain a) v) => Sectionable (Located a) (InSpace v n a, EndValues a, (~) (* -> *) (Codomain a) v) => EndValues (Located a) (DomainBounds t, EndValues (Tangent t)) => EndValues (Tangent (Located t)) DomainBounds a => DomainBounds (Located a) (InSpace v n a, Parametric a, (~) (* -> *) (Codomain a) v) => Parametric (Located a) Parametric (Tangent t) => Parametric (Tangent (Located t)) TrailLike t => TrailLike (Located t) `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]) ToPath (Located (Segment Closed v n)) ToPath (Located (Trail v n)) ToPath (Located (Trail' l v n)) (Metric v, Metric u, OrderedField n, (~) * r (Located (Trail u n))) => Deformable (Located (Trail v n)) r (LinearMappable a b, (~) * (N a) (N b), (~) * r (Located b)) => AffineMappable (Located a) r (LinearMappable a b, (~) * r (Located b)) => LinearMappable (Located a) r 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 type N (Located a) = N a type Codomain (Located a) = Point (Codomain a)

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