Copyright  (c) 20132015 diagramslib team (see LICENSE) 

License  BSDstyle (see LICENSE) 
Maintainer  diagramsdiscuss@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  
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)) Source  Same as 
(Metric v, OrderedField n) => Reversing (Located (Trail' l v n)) Source  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  
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  
(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')) Source  
Snoc (Path v n) (Path v' n') (Located (Trail v n)) (Located (Trail v' n')) Source  
Each (Path v n) (Path v' n') (Located (Trail v n)) (Located (Trail v' n')) Source  
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 littlef (endo)functor on the category of types
with associated vector space v
; but that is not covered by the
standard Functor
class.)