@@ -149,6 +149,7 @@ import Diagrams.Core.V
149
149
import Linear.Affine
150
150
import Linear.Metric
151
151
import Linear.Vector
152
+ import Linear.V1
152
153
153
154
-- XXX TODO: add lots of actual diagrams to illustrate the
154
155
-- documentation! Haddock supports \<\<inline image urls\>\>.
@@ -429,7 +430,7 @@ instance (Metric v, OrderedField n, Semigroup m)
429
430
430
431
---- Juxtaposable
431
432
432
- instance (Metric v , OrderedField n , Monoid' m )
433
+ instance (Metric v , OrderedField n , Monoid' m , T. Traversable v )
433
434
=> Juxtaposable (QDiagram b v n m ) where
434
435
juxtapose = juxtaposeDefault
435
436
@@ -463,17 +464,25 @@ instance (Metric v, OrderedField n, Semigroup m)
463
464
464
465
-- | Every diagram has an intrinsic \"local origin\" which is the
465
466
-- basis for all combining operations.
466
- instance (Metric v , OrderedField n , Semigroup m )
467
+ instance (Metric v , T. Traversable v , OrderedField n , Monoid' m )
467
468
=> HasOrigin (QDiagram b v n m ) where
468
469
moveOriginTo = translate . (origin .-. )
469
470
470
471
---- Transformable
471
472
472
473
-- | Diagrams can be transformed by transforming each of their
473
474
-- components appropriately.
474
- instance (Metric v , OrderedField n , Semigroup m )
475
+ instance (Metric v , T. Traversable v , OrderedField n , Monoid' m )
475
476
=> Transformable (QDiagram b v n m ) where
476
- transform = undefined -- over _Wrapped' . transform
477
+ transform t (QD c) = over trace (transform t) qd
478
+ where
479
+ qd = over envelope (transform t) qd'
480
+ qd' = c >>>= \ (rTree, summary) -> QD . return $ (transform t rTree, summary)
481
+
482
+ -- XXX I'm still not sure this is what we want? What to do with queries
483
+ -- We transform the 'RTree' using it's instance and the components of
484
+ -- 'Summary' separately.
485
+
477
486
478
487
--- XXX not sure why (over _Wrapped' . transform) doesn't type check.
479
488
--
@@ -688,6 +697,15 @@ data RNode b v n a = RStyle (Style v n) -- ^ A style node.
688
697
| RPrim (Prim b v n ) -- ^ A primitive.
689
698
| REmpty
690
699
700
+ type instance V (RNode b v n a ) = v
701
+ type instance N (RNode b v n a ) = n
702
+
703
+ instance (Additive v , T. Traversable v , Floating n ) => Transformable (RNode b v n a ) where
704
+ transform t (RStyle (Style v)) = RStyle $ transform t (Style v)
705
+ transform _ (RAnnot a) = RAnnot a
706
+ transform t (RPrim (Prim v)) = RPrim $ transform t (Prim v)
707
+ transform _ REmpty = REmpty
708
+
691
709
-- | An 'RTree' is a compiled and optimized representation of a
692
710
-- 'QDiagram', which can be used by backends. They have the
693
711
-- following invariant which backends may rely upon:
@@ -704,6 +722,9 @@ instance Rewrapped (RTree b v n a) (RTree b' v' n' a')
704
722
type instance V (RTree b v n a ) = v
705
723
type instance N (RTree b v n a ) = n
706
724
725
+ instance (Additive v , T. Traversable v , Floating n ) => Transformable (RTree b v n a ) where
726
+ transform t = over _Wrapped' (fmap $ transform t)
727
+
707
728
instance Semigroup (RTree b v n a ) where
708
729
RTree t1 <> RTree t2 = RTree (Node REmpty [t1,t2])
709
730
sconcat ts = RTree (Node REmpty . map (op RTree ) . NEL. toList $ ts)
0 commit comments