Copyright | (c) 2013-2015 diagrams-lib team (see LICENSE) |
---|---|
License | BSD-style (see LICENSE) |
Maintainer | diagrams-discuss@googlegroups.com |
Safe Haskell | None |
Language | Haskell2010 |
"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.
Documentation
"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.
(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 # | |
Generic (Located a) Source # | |
(Serialize a, Serialize (V a (N a))) => Serialize (Located a) Source # | |
Enveloped a => Juxtaposable (Located a) Source # | |
Enveloped a => Enveloped (Located a) Source # | The envelope of a |
(Traced a, Num (N a)) => Traced (Located a) Source # | The trace of a |
Qualifiable a => Qualifiable (Located a) Source # | |
(Additive (V a), Num (N a), Transformable a) => Transformable (Located a) Source # | Applying a transformation |
(Num (N a), Additive (V a)) => HasOrigin (Located a) Source # |
|
(Metric v, OrderedField n) => Reversing (Located (Trail v n)) # | Same as |
(Metric v, OrderedField n) => Reversing (Located (Trail' l v n)) # | Same as |
(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 # | |
Alignable a => Alignable (Located a) Source # | |
TrailLike t => TrailLike (Located t) Source # |
|
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 # | |
(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 # | |
(Metric v, Metric u, OrderedField n, (~) * r (Located (Trail u n))) => Deformable (Located (Trail v n)) r Source # | |
Each (Path v n) (Path v' n') (Located (Trail v n)) (Located (Trail v' n')) # | |
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')) # | |
type Rep (Located a) Source # | |
type V (Located a) Source # | |
type N (Located a) Source # | |
type Codomain (Located 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.)