diagramscore
Core libraries for diagrams EDSL
Version on this page:  1.5.1 
LTS Haskell 22.34:  1.5.1.1@rev:2 
Stackage Nightly 20240914:  1.5.1.1@rev:2 
Latest on Hackage:  1.5.1.1@rev:2 
diagramscore1.5.1@sha256:3b04d8c443f7f41a4b29a13ba6a3cbd82df81c437ad1795a64305372a3830922,2913
Module documentation for 1.5.1
The core modules defining the basic data structures and algorithms for diagrams, a Haskell embedded domainspecific language for compositional, declarative drawing.
Changes
v1.5.1 (20230511)
 Allow
base4.18
and test on GHC 9.6 (thanks to @sergv)  Fix some warnings (thanks to @sergv)
 Fix some documentation typos (thanks to @mchav)
v1.5.0.1r1 (20221130)
 Allow
linear1.22
v1.5.0.1 (20220827)
 Test with up to
base4.17
and GHC 9.4  Allow
lens5.2
 Fix documentation for
atLeast
andatMost
(thanks to Igor Moreno)
v1.5.0 (20210513)
 Updates for GHC 8.10 and 9.0
 Drop support for GHC < 8.4
 Remove deprecated
Option
type in favor ofMaybe
. This is a breaking API change.
v1.4.2r1 (20200210)
 Allow
lens4.19
andlinear1.21
v1.4.2 (20191019)
 New
KeyVal
constructor forAnnotation
(PR)  Updates for GHC 8.8
 Drop support for GHC 7.6 and 7.8
v1.4.1.1 (20180617)
 Add some
ConstraintKinds
pragmas to allow compilation on GHC 7.8 and 7.6
v1.4.1 (20180410)
 Allow
base4.11
 Allow
lens4.16
 Add
Semigroup
instance to build on GHC 8.4
v1.4.0.1
 Allow base4.10
v1.4 (20161026)

New features

New
eachName
traversal, for traversing over parts of aName
that match a given type 
More documentation explaining
HasOrigin
andTransformable
instances forEnvelope


Dependency/version changes
 Allow
lens4.15
 Many other upper bounds bumped; see minor release changelogs below.
 Allow

New instances

Transformable
instance forMeasured

A bunch more instances for
Query
(Distributive
,Representable
,Profunctor
,Coseive
,Closed
,Costrong
,Corepresentable
)


API changes

Move some
Query
related functions todiagramslib
(sample
,value
,resetValue
,clearValue
) 
Remove some redundant constraints in type signatures (should not actually affect API)

v1.3.0.8 (20160605)
 allow
base4.9
 build warningfree on GHC 8.0.1
v1.3.0.7 (20160501)
 allow
lens4.14
v1.3.0.6 (20160219)
 allow
unorderedcontainers0.2.*
v1.3.0.5 (20160114)
 allow
unorderedcontainers0.2.6
v1.3.0.4 (20151110)
 allow
semigroups0.18
v1.3.0.3 (20150917)
 allow
lens4.13
 allow
linear1.20
 allow
semigroups0.17
v1.3.0.2 (20150719)
v1.3.0.1 (20150526)
v1.3 (20150419)

New features

Update for ghc7.10.

Switch from
vectorspace
tolinear
for linear algebra. 
OpacityGroup
annotation for setting the opacity of diagrams as a group. Opacity groups can be applied with theopacityGroup
orgroupOpacity
functions. 
Added
atAttr
,atMAttr
andatTAttr
lenses onto the attributes of styles. 
InSpace
andSameSpace
synonyms. 
size
function for computing the range of an enveloped object in the basis vectors. 
“Grouping” for transparent things #21


Dependency/version changes
 Allow
base4.8
 Allow
lens4.9
 Allow

New instances
Show
instances forAttribute
andStyle
.Each
,Ixed
andAt
instances for andStyle
.

API changes

Measure
has a new internal representation.Local
,Global
,Normalized
, andOutput
have been renamed tolocal
,global
,normalized
andoutput
respectivly.Measure
is now defined inDiagrams.Core.Measure
. 
GTAttribute
has been removed.MAttribute
now holds measured attributes and no longer requires aData
instance. 
V
is now a* > *
kind type family. 
New type family
N
for the number type of an object,Scalar
type family no longer exists. 
(>)
has moved to(.>>)
to make room for lens’s snoc operator. 
Style
’s internal representation now uses a hashmap of theTypeRep
.

Merged pull requests:

Bump lens upper version bounds #74 (RyanGlScott)

Add Diagram B synonym for Diagram b v n #73 (jeffreyrosenbluth)

Bump linear upper version bounds #75 (RyanGlScott)

Change Measure back to not using Scalar v #65 (Mathnerd314)

Remove gratuitous Data constraints #69 (Mathnerd314)
v1.2.0.6 (20150403)
Closed issues:
 Please add support for recent versions of vectorspace #78
v1.2.0.5 (20150113)
v1.2.0.4 (20141204)
v1.2.0.3 (20141117)
v1.2.0.2 (20140822)
Closed issues:
 Warn against GND for IsName #67
v1.2.0.1 (20140604)
Merged pull requests:
v1.2 (20140602)

New features

New function
matrixHomRep
to convert a transformation to a homogeneous matrix representation. 
New function
dropTransl
to drop the translation component from a transformation. 
A miniDSL for Measures.

New
extent
function, used indiameter
. 
New
dimension
function to return the dimension of a vector space. 
New
_relative
iso between points and vectors. 
avgScale
function (for computing the average scaling factor of a transformation) has been moved fromdiagramslib
todiagramscore
and generalized to work over any vector space.


Dependency/version changes
 Allow
semigroups0.15
 Allow
lens4.2
 Allow

API changes

Major refactoring which removes
freeze
(and henceSplit
transforms, etc.) and adds units ofMeasure
. 
Refactoring and simplification of the
Backend
class. 
Remove
Multibackend
. 
Remove
nullPrim
,IsPrim
and simplifyRPrim
so that it does not carry a transformation. 
Update
adjustDia
to return a transformation, not just a scale factor. AddrenderDiaT
which returns a transformation (for use by end users, e.g. to convert output coordinates back into local coordinates).

Implemented enhancements:
 Extracting things from Prim wrappers #42
Closed issues:
Merged pull requests:

Cleanslate redesign/simplification of
Backend
class #60 (byorgey) 
Avg scale #58 (jeffreyrosenbluth)

Preliminary implementation of Measure #55 (jeffreyrosenbluth)

No mco #62 (jeffreyrosenbluth)
v1.1 (20140309)

New features
 New
basis
function  New
determinant
function for computing the determinant of aTransformation
 Add
Typeable
constraint onPrim
s, making it possible to extract things back out of aPrim
wrapper usingcast
 Raw
Trace
s now return a sorted list of intersections, instead of only the smallest. This is used to implement a new family of functionsrayTraceV
,rayTraceP
,maxRayTraceV
,maxRayTraceP
, which work similarly to the parallel versions withoutRay
, but return the first intersection in the positive direction from the given point, rather than the smallest in absolute terms.  New
Annotation
type and correspondingapplyAnnotation
function, for attaching uninterpreted annotations at specific points in a diagram tree. Currently this is used for hyperlinks; more annotation types will be added in the future.
 New

Dependency/version changes
 Require
lens4.0
 Allow
vectorspacepoints0.2
 Require

Bug fixes
 Looking up a subdiagram by name now results in a diagram which still has that name (#43)
Closed issues:
 Named subdiagrams lose their names after being looked up #43
Merged pull requests:

Added
basis
, simplifiedonBasis
#54 (jeffreyrosenbluth) 
Determinants #53 (jeffreyrosenbluth)

Introduce Typeable constraint on Prims (see #42) #52 (byorgey)

return list of traces #48 (jeffreyrosenbluth)
v1.0.0.1 (20131128)
v1.0 (20131125)

New features

Delayed subtrees: instead of a primitive, one can now also have a delayed subtree at a leaf, containing a continuation which generates a
QDiagram
when given the accumulated dannotation at that point in the tree. Useful for things which need to know the final transformation applied to them before deciding what diagram to generate. The prototypical use case is arrows: see https://github.com/diagrams/diagramslib/issues/112 . However, this may be useful for other things as well: for example, diagrams which scale normally until hitting some maximum or minimum size, at which point they refuse to scale any further (or more generally diagrams which scale as some nonlinear function of the transformation applied to them).The only downside is that the uannotation must be fixed ahead of time—doing otherwise requires a more general solution for constraint solving.

New function
lookupName
for doing a simple lookup of a named subdiagram 
New module
Diagrams.Core.Compile
, containing a framework for compilingQDiagrams
into a simpler tree typeRTree
, which may be used by backends for rendering.


New instances

Qualifiable
instances for(,)
,(,,)
,[]
,Set
,Map k
, and(>) e
. 
(>) e
instance forJuxtaposable
(thanks to Carlos Scheidegger)


API changes

Export
pointDiagram
function, which creates an otherwise empty diagram with a point (not empty) envelope 
A bunch of stuff now uses machinery from the
lens
library.envelope
,trace
, andsubMap
are nowLens'
esWrapped
instances forTrace
,TransInv
,QDiagram
,SubMap
,Envelope
,Style
,Query
, andName
(replacesNewtype
instances)Iso
s forQuery
,Envelope
,QDiagram
,SubMap
,TransInv

Implemented enhancements:
 Tree structure in Backends #19
Merged pull requests:

Lens #44 (jeffreyrosenbluth)
v0.7.0.1 (20130927)
Merged pull requests:
v0.7 (20130809)

New features
 new function
onBasis
, to extract the matrix equivalent of aTransformation
SubMap
s are nowDeletable
 new function
localize
for hiding/deleting names from scope  new
IsPrim
class, containingtransformWithFreeze
function. This is primarily intended to support scaleinvariant primitives (e.g. arrowheads) but may be useful for other stuff as well. The default implementation ofrenderDia
now usestransformWithFreeze
.  optimized
Transformable
instance forTransInv
 new function

New instances

Eq
,Ord
,Enveloped
,Traced
, andQualifiable
instances forTransInv

Transformable
instance for functions, which acts by conjugation


API changes
named
andnamePoint
have moved to thediagramslib
package.

Dependency/version changes
 allow
base4.7
 upgrade to
monoidextras0.3
 allow
Implemented enhancements:
 Function to extract matrix coefficients from a Transformation #22
Closed issues:
 Support for monoidextras0.3.0.0 #38
Merged pull requests:
v0.6.0.2 (20130306)
Fixed bugs:
 radius is wrong #35
Merged pull requests:
v0.6.0.1 (20130107)
Fixed bugs:
 “type instance V (Point v) = v” is not visible without explicit import. #17
Merged pull requests:
v0.6 (20121212)

New features

Proper support for subdiagrams: previous versions of diagramscore had a mechanism for associating names with a pair of a location and an envelope. Now, names are associated with actual subdiagrams (including their location and envelope, along with all the other information stored by a diagram).
See
Diagrams.Core.Types
. 
Traces: in addition to an envelope, each diagram now stores a “trace”, which is like an embedded raytracer: given any ray (represented by a base point and a vector), the trace computes the closest point of intersection with the diagram along the ray. This is useful for determining points on the boundary of a diagram, e.g. when drawing arrows between diagrams.
See
Diagrams.Core.Trace
.


API changes

The modules have all been renamed to be more consistent with the module naming scheme in the rest of the diagrams universe. In particular:
Graphics.Rendering.Diagrams
–>Diagrams.Core
Grahpics.Rendering.Diagrams.Core
–>Diagrams.Core.Types
Graphics.Rendering.Diagrams.*
–>Diagrams.Core.*

Graphics.Rendering.Diagrams.UDTree
has been split out into a separatedualtree
package (which has also been substantially rewritten). 
Graphics.Rendering.Diagrams.{Monoids,MList}
have been split out into a separatemonoidextras
package. 
The
names
function now returns a list of names and their associated locations, instead of the associated subdiagrams. In particular the output is suitable to be rendered to aString
usingshow
. 
The new
subMap
function fills a similar role thatnames
used to play, returning the entire mapping from names to subdiagrams. 
New functions
envelope[VP]May
envelopeV
andenvelopeP
return the zero vector and origin, respectively, when called on an empty envelope. However, sometimes it’s useful to actually know whether the envelope was empty or not (the zero vector and the origin are legitimate outputs from nonempty envelopes). The new functions have their return type wrapped inMaybe
for this purpose. 
New functions
envelopeS
andenvelopeSMay
Like
envelope[VP](May)
, but returning a scalar multiple of the input vector. 
The
Graphics.Rendering.Diagrams.Util
module has been removed, along with thewithLength
function. Calls towithLength
can be replaced usingwithLength s v = s *^ normalized v

Add needed constraints
(InnerSpace v, OrderedField (Scalar v), Monoid' m)
to the type of therenderDias
method in theMultiBackend
class. 
Generalized
Transformable
instances for pairs and tuplesPreviously, the components of the tuples were required to have the same type; but everything still works as long as they all share the same vector space. This is actually useful in practice: say, if we wanted to pair a diagram with a path and then apply the same transformation to both.


Improvements
 More efficient implementation of
diameter
 More efficient implementation of

Dependency/version changes
 Tested with GHC 7.6.1
 allow
base4.6
 allow
containers0.5.*
 allow
MemoTrie0.6.1

Bug fixes

juxtaposeDefault now correctly handles empty envelopes (#37)
juxtaposeDefault
is now the identity on the second object if either one has an empty envelope. In particular this means thatmempty
is now an identity element forbeside
and friends.

Implemented enhancements:

Turn R2 into D2 (Generalize R2 to any numeric type) #20

Terminology: rename “bounding function” > “envelope”; “boundary function” > “boundary” #16

Refactor: rename AnnDiagram to QDiagram #15

Combine (point, bounds) pairs stored in NameMap into a single “located bounding function” data structure #14

Remember more structure when building diagrams #12

Diagrambuilding service library + executable #7
Fixed bugs:

setBounds is incorrect – throws away bounds of subsequent diagrams too #13

Start developing test suites #10

Freezing does not appear to work with the SVG backend #9

Silent failure on other image types than .png #6

Tutorial contains links to old version of package #5

space is not left for empty diagram when using e.g. hcat’ with {sep = … } #3

Ellipse rotated incorrectly in test file with ellipse next to a square #2
Closed issues:

Rename core modules to remove Graphics.Rendering prefix. #28

Improve haddock documentation #11

Improve description of Envelope in Haddock documentation #1
Merged pull requests:

Add envelopeS / envelopeSMay for querying scalar displacements from envelopes #31 (mgsloan)

Rename
names
tosubMap
, and add new functionnames
#26 (byorgey) 
Fix for juxtaposeDefault to correctly handle empty envelopes #24 (byorgey)
v0.5 (20120309)

New features:
 New
Juxtaposable
class  New
NullBackend
andD
types, for conveniently giving a monomorphic type to diagrams when we don’t care which one it is.  #27: Change type of
adjustDia
to return a new options record (with an explicitly filledin size)
 New

New instances:
Enveloped
,HasOrigin
,Juxtaposable
,HasStyle
, andTransformable
instances forSet
s and tuplesV Double = Double
Juxtaposable
andBoundable
instances forMap

API changes
AnnDiagram
renamed toQDiagram
 #61: terminology change from “bounds” to “envelope”
boundary
>envelopeP
 “bounding region” > “envelope”
Bounds
>Envelope
Boundable
>Enveloped
getBounds
>getEnvelope
 etc.
 Split out definition of
Point
into separate package (vectorspacepoints
)  The
Point
constructorP
is no longer exported fromGraphics.Rendering.Diagrams
. See theDiagrams.TwoD.Types
module fromdiagramslib
for new tools for working with abstract 2D points. If you really need theP
constructor, importGraphics.Rendering.Diagrams.Points
.  Namerelated functions now return “located bounding functions” instead of pairs of points and bounds, to allow for future expansion.

Dependency/version changes:
vectorspace
0.8 is now required. Bump base upper bound to allow 4.5; now tested with GHC 7.4.1.

Bug fixes:
 Bug fix related to empty envelopes
0.4: 23 October 2011
 improved documentation
 a few new instances (Newtype Point, Boundable Point)
 new functions (value, clearValue, resetValue) for working with alternate query monoids
0.3: 18 June 2011
 big overhaul of name maps:
 allow arbitrary types as atomic names
 carry along bounding functions as well as names in NameMaps
 additional functions for querying information associated with names
 fix for issue #34 (fix behavior of setBounds)
 Transformable and HasOrigin instances for Transformations
0.2: 3 June 2011
 bounding regions can now be overridden
 new namePoint function for more flexibly assigning names to arbitrary points
 add HasStyle, Boundable, and HasOrigin instances for lists
 add a “trivial backend”
 transformable attributes
0.1.1: 18 May 2011
 link to new website
0.1: 17 May 2011
 initial preview release
* This Change Log was automatically generated by (and hand edited) github_changelog_generator