content: -----------------------------------------------------------------------------
  -- |
  -- Module      :  Diagrams.Core
  -- Copyright   :  (c) 2011-2015 diagrams-core team (see LICENSE)
  -- License     :  BSD-style (see LICENSE)
  -- Maintainer  :  diagrams-discuss@googlegroups.com
  --
  -- The core library of primitives forming the basis of an embedded
  -- domain-specific language for describing and rendering diagrams.
  -- Normal users of the diagrams library should almost never need to
  -- import anything from this package directly; instead, import modules
  -- (especially @Diagrams.Prelude@) from the diagrams-lib package,
  -- which re-exports most things of value to users.
  --
  -- For most library code needing access to core internals, it should
  -- be sufficient to import this module, which simply re-exports useful
  -- functionality from other modules in the core library.  Library
  -- writers needing finer-grained access or functionality may
  -- occasionally find it useful to directly import one of the
  -- constituent core modules.
  --
  -- The diagrams library relies heavily on custom types and classes. Many
  -- of the relevant definitions are in the "Diagrams.Core.Types" module.
  -- Indeed the definition of the diagram type @QDiagram@ is contained in:
  -- 'Diagrams.Core.Types.QDiagram'.
  --
  -- The best place to start when learning
  -- about diagrams\' types is the user manual:
  -- <https://diagrams.github.io/doc/manual.html#type-reference>
  -- The following list shows which types are contained in each module of
  -- "Diagrams.Core".
  --
  -- * "Diagrams.Core.Types"
  --
  --     * @'Annotation'@,
  --     * @'UpAnnots' b v n m@, @'DownAnnots' v n@,
  --     * @'QDiaLeaf' b v n m@, @'Measure' n@,
  --     * @'Subdiagram' b v n m@,  @'SubMap' b v n m@,
  --     * @'Prim' b v n@, @'Backend' b v n@,
  --     * @'DNode' b v n a@, @'DTree' b v n a@,
  --     * @'RNode' b v n a@, @'RTree' b v n a@,
  --     * @'NullBackend'@, @'Renderable' t b@,
  --     * @'D' v n@.
  --
  -- * "Diagrams.Core.Envelope"
  --
  --     * @'Envelope' v n@, @'Enveloped' a@,
  --     * @'OrderedField' s@.
  --
  -- * "Diagrams.Core.Juxtapose"
  --
  --     * @'Juxtaposable' a@.
  --
  -- * "Diagrams.Core.Names"
  --
  --     * @'AName'@, @'Name'@, @'IsName' a@,
  --     * @'Qualifiable' q@.
  --
  -- * "Diagrams.Core.HasOrigin"
  --
  --     * @'HasOrigin' t@.
  --
  -- * "Diagrams.Core.Query"
  --
  --     * @'Query' v n m@.
  --
  -- *  "Diagrams.Core.Style"
  --
  --     * @'AttributeClass' a@, @'Attribute' v n@,
  --     * @'Style' v n@, @'HasStyle'@.
  --
  -- * "Diagrams.Core.Trace"
  --
  --     * @'SortedList' a@,
  --     * @'Trace' v n@, @'Traced' a@.
  --
  -- * "Diagrams.Core.Transform"
  --
  --     * @u ':-:' v@, @'HasLinearMap'@, @'HasBasis'@
  --     * @'Transformation' v n@, @'Transformable' t@,
  --     * @'TransInv' t@.
  --
  -- * "Diagrams.Core.V"
  --
  --     * @'V' a@,
  --     * @'N' a@,
  --     * @'Vn' a@,
  --     * @'InSpace' v n a@,
  --     * @'SameSpace' a b@.
  -----------------------------------------------------------------------------
  
  module Diagrams.Core
         ( -- * Associated vector spaces
  
           V, N, Vn, InSpace, SameSpace
  
           -- * Points
  
         , Point, origin, (*.)
         , relative
  
           -- * Transformations
  
           -- ** Utilities
         , basis
         , dimension
         , determinant
         , isReflection
  
           -- ** Invertible linear transformations
         , (:-:), (<->), linv, lapp
  
           -- ** General transformations
         , Transformation
         , inv, transp, transl
         , dropTransl
         , apply
         , papply
         , fromLinear
  
           -- ** Some specific transformations
         , translation, translate, moveTo, place
         , scaling, scale
         , avgScale
  
           -- ** The Transformable class
  
         , Transformable(..)
  
           -- ** Translational invariance
  
         , TransInv(TransInv)
         , eye
  
           -- * Names
  
         , AName
         , Name, IsName(..)
         , Qualifiable(..), (.>)
         , eachName
  
           -- ** Subdiagram maps
  
         , SubMap(..)
         , fromNames
         , rememberAs
  
         , lookupSub
  
           -- * Attributes and styles
  
         , AttributeClass
         , Attribute (..)
  
         , Style, HasStyle(..)
         , getAttr
         , atAttr, atMAttr, atTAttr
         , applyAttr, applyMAttr, applyTAttr
  
           -- * Envelopes
  
         , Envelope(..)
         , appEnvelope, onEnvelope, mkEnvelope
         , Enveloped(..)
         , envelopeVMay, envelopeV, envelopePMay, envelopeP
         , diameter, radius, size
  
           -- * Traces
  
         , Trace(Trace)
         , SortedList, mkSortedList, getSortedList
         , appTrace, mkTrace
         , Traced(..)
         , traceV, traceP
         , maxTraceV, maxTraceP
         , rayTraceV, rayTraceP
         , maxRayTraceV, maxRayTraceP
  
           -- * Things with local origins
  
         , HasOrigin(..), moveOriginBy
  
           -- * Juxtaposable things
  
         , Juxtaposable(..), juxtaposeDefault
  
           -- * Queries
  
         , Query(..)
  
           -- * Primitives
  
         , Prim(..)
  
           -- * Diagrams
  
         , QDiagram, Diagram, mkQD, pointDiagram
         , envelope, trace, subMap, names, query
  
         , nameSub
         , withName
         , withNameAll
         , withNames
         , localize
  
         , href
         , opacityGroup
         , groupOpacity
  
         , setEnvelope, setTrace
  
         , atop
  
           -- ** Subdiagrams
  
         , Subdiagram(..), mkSubdiagram
         , getSub, rawSub
         , location
         , subPoint
  
           -- ** Measurements
  
         , Measured
         , Measure
         , fromMeasured
         , output
         , local
         , global
         , normalized
         , scaleLocal
         , atLeast
         , atMost
  
           -- * Backends
  
         , Backend(..)
         , Renderable(..)
  
         , renderDia
         , renderDiaT
  
           -- ** The null backend
  
         , NullBackend, D
  
           -- * Convenience classes
  
         , HasLinearMap
         , HasBasis
         , OrderedField
         , TypeableFloat
         , Monoid'
  
         ) where
  
  import           Diagrams.Core.Compile
  import           Diagrams.Core.Envelope
  import           Diagrams.Core.HasOrigin
  import           Diagrams.Core.Juxtapose
  import           Diagrams.Core.Measure
  import           Diagrams.Core.Names
  import           Diagrams.Core.Points
  import           Diagrams.Core.Query
  import           Diagrams.Core.Style
  import           Diagrams.Core.Trace
  import           Diagrams.Core.Transform
  import           Diagrams.Core.Types
  import           Diagrams.Core.V
  
  import           Data.Monoid.WithSemigroup (Monoid')
  