Maintainer  diagramsdiscuss@googlegroups.com 

Safe Haskell  None 
This module defines a type of names which can be used for referring to locations within diagrams, and related types.
 data AName where
 newtype Name = Name [AName]
 class (Typeable a, Ord a, Show a) => IsName a where
 (.>) :: (IsName a1, IsName a2) => a1 > a2 > Name
 class Qualifiable q where
 newtype NameMap v = NameMap (Map Name [LocatedEnvelope v])
 fromNames :: (InnerSpace v, AdditiveGroup (Scalar v), Ord (Scalar v), Floating (Scalar v), IsName a) => [(a, Point v)] > NameMap v
 fromNamesB :: IsName a => [(a, LocatedEnvelope v)] > NameMap v
 rememberAs :: IsName a => a > LocatedEnvelope v > NameMap v > NameMap v
 lookupN :: IsName n => n > NameMap v > Maybe [LocatedEnvelope v]
Names
Atomic names
Names
A (qualified) name is a (possibly empty) sequence of atomic names.
Eq Name  
Ord Name  
Show Name  
Typeable Name  
Monoid Name  
Semigroup Name  
Qualifiable Name  Of course, names can be qualified using 
IsName Name  
Action Name a  Names don't act on anything else. 
Action Name (NameMap v)  A name acts on a name map by qualifying every name in it. 
Newtype (NameMap v) (Map Name [LocatedEnvelope v])  
Newtype (QDiagram b v m) (UDTree (UpAnnots v m) (DownAnnots v) (Prim b v)) 
(.>) :: (IsName a1, IsName a2) => a1 > a2 > NameSource
Convenient operator for writing qualified names with atomic
components of different types. Instead of writing toName a1 <>
toName a2 <> toName a3
you can just write a1 .> a2 .> a3
.
Qualifiable
class Qualifiable q whereSource
Instances of Qualifiable
are things which can be qualified by
prefixing them with a name.
Qualifiable Name  Of course, names can be qualified using 
Qualifiable (NameMap v) 

(HasLinearMap v, InnerSpace v, OrderedField (Scalar v), Monoid m) => Qualifiable (QDiagram b v m)  Diagrams can be qualified so that all their named points can now be referred to using the qualification prefix. 
Name maps
A NameMap
is a map associating names to located envelopes,
i.e. envelopes with concrete locations for their base
points. There can be multiple associations for any given name.
NameMap (Map Name [LocatedEnvelope v]) 
Action Name (NameMap v)  A name acts on a name map by qualifying every name in it. 
Show v => Show (NameMap v)  
Monoid (NameMap v) 

Semigroup (NameMap v)  
(AdditiveGroup (Scalar v), Fractional (Scalar v), InnerSpace v) => HasOrigin (NameMap v)  
(AdditiveGroup (Scalar v), InnerSpace v, Floating (Scalar v), HasLinearMap v) => Transformable (NameMap v)  
Qualifiable (NameMap v) 

Newtype (NameMap v) (Map Name [LocatedEnvelope v])  
Newtype (QDiagram b v m) (UDTree (UpAnnots v m) (DownAnnots v) (Prim b v)) 
Constructing name maps
fromNames :: (InnerSpace v, AdditiveGroup (Scalar v), Ord (Scalar v), Floating (Scalar v), IsName a) => [(a, Point v)] > NameMap vSource
Construct a NameMap
from a list of (name, point) pairs.
fromNamesB :: IsName a => [(a, LocatedEnvelope v)] > NameMap vSource
Construct a NameMap
from a list of associations between names
and located envelopes.
rememberAs :: IsName a => a > LocatedEnvelope v > NameMap v > NameMap vSource
Give a name to a located envelope.