1 /*
2 
3  Copyright 2018 Sebastian B. Galkin
4 
5  This file is part of paraseba/scaladores-may-2018-talk.
6 
7  paraseba/scaladores-may-2018-talk is free software: you can redistribute it and/or modify
8  it under the terms of the GNU General Public License as published by
9  the Free Software Foundation, either version 3 of the License, or
10  (at your option) any later version.
11 
12  paraseba/scaladores-may-2018-talk is distributed in the hope that it will be useful,
13  but WITHOUT ANY WARRANTY; without even the implied warranty of
14  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  GNU General Public License for more details.
16 
17  You should have received a copy of the GNU General Public License
18  along with Foobar.  If not, see <http://www.gnu.org/licenses/>.
19 
20  */
21 
22 package monoid.diagrams
23 
24 import scala.collection.immutable._
25 import monoid.monoids._
26 
27 
28 object Diagrams {
29   import SemigroupSyntax._
30 
31   sealed trait Prim
32   final case class Point() extends Prim
33   final case class Line() extends Prim
34   final case class Ellipse() extends Prim
35 
36   final case class Dual[M](undual: M)
37 
38   implicit def dualMonoid[M:Monoid]: Monoid[Dual[M]] = new Monoid[Dual[M]] {
39     def zero = Dual(implicitly[Monoid[M]].zero)
40     def append(a: Dual[M], b : => Dual[M]) = Dual(b.undual |+| a.undual)
41   }
42 
43   def wSemi[Out, In:Semigroup](unwrap: Out => In, wrap: In => Out): Semigroup[Out] = new Semigroup[Out] {
44     def append(x:Out, y: => Out) = wrap(unwrap(x) |+| unwrap(y))
45   }
46 
47   def wMon[Out, In:Monoid](unwrap: Out => In, wrap: In => Out): Monoid[Out] = new Monoid[Out] {
48     def append(x: Out, y: => Out) = wrap(unwrap(x) |+| unwrap(y))
49     def zero = wrap(implicitly[Monoid[In]].zero)
50   }
51 
52   type P2 = (Double, Double)
53   type V2 = (Double, Double)
54   def v2mul(s: Double, v: V2): V2 = v match {
55     case (x,y) => (s*x, s*y)
56   }
57 
58 
59   import SimpleMonoids._
60 
61   final case class Diagram1(primitives: Dual[List[Prim]])
62 
63   final case class Max[A](unmax: A)
64   final case class Min[A](unmin: A)
65 
66   implicit def maxSemi[A:Ordering]: Semigroup[Max[A]] = new Semigroup[Max[A]] {
67     def append(a: Max[A], b: => Max[A]): Max[A] = Max(Ordering[A].max(a.unmax, b.unmax))
68   }
69 
70   implicit def minSemi[A:Ordering]: Semigroup[Min[A]] = new Semigroup[Min[A]] {
71     def append(a: Min[A], b: => Min[A]): Min[A] = Min(Ordering[A].min(a.unmin, b.unmin))
72   }
73 
74   final case class EnvelopeBad(f: V2 => Max[Double])
75   final case class Envelope(f: Option[V2 => Max[Double]])
76 
77   @SuppressWarnings(Array("org.wartremover.warts.Throw"))
78   @SuppressWarnings(Array("org.wartremover.warts.ToString"))
79   def envelopeP(p: Prim): Envelope = {throw new Exception(p.toString)}
80 
81   @SuppressWarnings(Array("org.wartremover.warts.Throw"))
82   @SuppressWarnings(Array("org.wartremover.warts.ToString"))
83   def translateP(v: V2, p: Prim): Prim = {throw new Exception(p.toString + v.toString)}
84 
85   def envelope(d: Diagram1): Envelope = mconcat(d.primitives.undual.map(envelopeP))
86   def translate(v: V2, d: Diagram1): Diagram1 = Diagram1(Dual(d.primitives.undual.map(translateP(v, _))))
87 
88   def beside(v: V2, d1: Diagram1, d2: Diagram1): Diagram1 =
89     (envelope(d1).f, envelope(d2).f) match {
90       case (Some(f1), Some(f2)) => d1 |+| translate(v2mul(f1(v).unmax + f2(v).unmax, v), d2)
91       case _ => d1 |+| d2
92     }
93 
94   object Envelope {
95     val badSemi: Semigroup[EnvelopeBad] = wSemi(_.f, EnvelopeBad(_))
96 
97     implicit val monoid: Monoid[Envelope] = wMon(_.f, Envelope(_))
98 
99   }
100 
101 
102   final case class TraceBad(f: P2 => V2 => Min[Double])
103   final case class Trace(f: P2 => V2 => Option[Min[Double]])
104 
105   @SuppressWarnings(Array("org.wartremover.warts.Throw"))
106   @SuppressWarnings(Array("org.wartremover.warts.ToString"))
107   def traceP(p: Prim): Trace = {throw new Exception(p.toString)}
108 
109   object Trace {
110     val semiBad: Semigroup[TraceBad] = wSemi(_.f, TraceBad(_))
111     implicit val monoid: Monoid[Trace] = wMon(_.f, Trace(_))
112 
113   }
114 
115   object Diagram1 {
116     implicit val monoid: Monoid[Diagram1] = wMon(_.primitives, Diagram1(_))
117   }
118 
119   final case class Diagram2 private (primitives: Dual[List[Prim]], env: Envelope, tr: Trace)
120   def envelope2(d: Diagram2): Envelope = d.env
121   def trace2(d: Diagram2): Trace = d.tr
122 
123   def primDiag(p: Prim): Diagram2 = Diagram2(Dual(List(p)), envelopeP(p), traceP(p))
124 
125   object Diagram2 {
126     def mkDiag(ps: List[Prim]): Diagram2 = mconcat(ps.map(primDiag))
127 
128     def d2Tuple(d: Diagram2): (Dual[List[Prim]], (Envelope, Trace)) =  (d.primitives, (d.env, d.tr))
129     def tuple2d2(t: (Dual[List[Prim]], (Envelope, Trace))): Diagram2  =  Diagram2(t._1,t._2._1,t._2._2)
130 
131     implicit val monoid: Monoid[Diagram2] = wMon(d2Tuple, tuple2d2)
132   }
133 
134 }
Line Stmt Id Pos Tree Symbol Code
38 7 1132 - 1135 Apply monoid.diagrams.Diagrams.$anon.<init> new $anon()
39 2 1169 - 1201 Apply monoid.diagrams.Diagrams.Dual.apply Diagrams.this.Dual.apply[M](scala.Predef.implicitly[monoid.monoids.Monoid[M]](evidence$1).zero)
39 1 1174 - 1200 Select monoid.monoids.Monoid.zero scala.Predef.implicitly[monoid.monoids.Monoid[M]](evidence$1).zero
40 5 1252 - 1273 Apply monoid.monoids.SemigroupSyntax.SemigroupOps.|+| monoid.monoids.SemigroupSyntax.ToSemigroupOps[M](b.undual)(evidence$1).|+|(a.undual)
40 4 1265 - 1273 Select monoid.diagrams.Diagrams.Dual.undual a.undual
40 3 1252 - 1260 Select monoid.diagrams.Diagrams.Dual.undual b.undual
40 6 1247 - 1274 Apply monoid.diagrams.Diagrams.Dual.apply Diagrams.this.Dual.apply[M](monoid.monoids.SemigroupSyntax.ToSemigroupOps[M](b.undual)(evidence$1).|+|(a.undual))
43 12 1365 - 1368 Apply monoid.diagrams.Diagrams.$anon.<init> new $anon()
44 8 1426 - 1435 Apply scala.Function1.apply unwrap.apply(x)
44 11 1421 - 1450 Apply scala.Function1.apply wrap.apply(monoid.monoids.SemigroupSyntax.ToSemigroupOps[In](unwrap.apply(x))(evidence$2).|+|(unwrap.apply(y)))
44 10 1426 - 1449 Apply monoid.monoids.SemigroupSyntax.SemigroupOps.|+| monoid.monoids.SemigroupSyntax.ToSemigroupOps[In](unwrap.apply(x))(evidence$2).|+|(unwrap.apply(y))
44 9 1440 - 1449 Apply scala.Function1.apply unwrap.apply(y)
47 19 1534 - 1537 Apply monoid.diagrams.Diagrams.$anon.<init> new $anon()
48 14 1607 - 1616 Apply scala.Function1.apply unwrap.apply(y)
48 13 1593 - 1602 Apply scala.Function1.apply unwrap.apply(x)
48 16 1588 - 1617 Apply scala.Function1.apply wrap.apply(monoid.monoids.SemigroupSyntax.ToSemigroupOps[In](unwrap.apply(x))(evidence$3).|+|(unwrap.apply(y)))
48 15 1593 - 1616 Apply monoid.monoids.SemigroupSyntax.SemigroupOps.|+| monoid.monoids.SemigroupSyntax.ToSemigroupOps[In](unwrap.apply(x))(evidence$3).|+|(unwrap.apply(y))
49 17 1638 - 1665 Select monoid.monoids.Monoid.zero scala.Predef.implicitly[monoid.monoids.Monoid[In]](evidence$3).zero
49 18 1633 - 1666 Apply scala.Function1.apply wrap.apply(scala.Predef.implicitly[monoid.monoids.Monoid[In]](evidence$3).zero)
55 20 1795 - 1798 Apply scala.Double.* s.*(x)
55 22 1794 - 1804 Apply scala.Tuple2.apply scala.Tuple2.apply[Double, Double](s.*(x), s.*(y))
55 21 1800 - 1803 Apply scala.Double.* s.*(y)
66 27 2025 - 2028 Apply monoid.diagrams.Diagrams.$anon.<init> new $anon()
67 23 2119 - 2126 Select monoid.diagrams.Diagrams.Max.unmax a.unmax
67 26 2099 - 2137 Apply monoid.diagrams.Diagrams.Max.apply Diagrams.this.Max.apply[A](scala.`package`.Ordering.apply[A](evidence$4).max(a.unmax, b.unmax))
67 25 2103 - 2136 Apply scala.math.Ordering.max scala.`package`.Ordering.apply[A](evidence$4).max(a.unmax, b.unmax)
67 24 2128 - 2135 Select monoid.diagrams.Diagrams.Max.unmax b.unmax
70 32 2199 - 2202 Apply monoid.diagrams.Diagrams.$anon.<init> new $anon()
71 29 2302 - 2309 Select monoid.diagrams.Diagrams.Min.unmin b.unmin
71 31 2273 - 2311 Apply monoid.diagrams.Diagrams.Min.apply Diagrams.this.Min.apply[A](scala.`package`.Ordering.apply[A](evidence$5).min(a.unmin, b.unmin))
71 28 2293 - 2300 Select monoid.diagrams.Diagrams.Min.unmin a.unmin
71 30 2277 - 2310 Apply scala.math.Ordering.min scala.`package`.Ordering.apply[A](evidence$5).min(a.unmin, b.unmin)
79 33 2586 - 2617 Throw <nosymbol> throw new scala.`package`.Exception(p.toString())
83 34 2781 - 2825 Throw <nosymbol> throw new scala.`package`.Exception(p.toString().+(v.toString()))
85 35 2900 - 2909 Apply monoid.diagrams.Diagrams.envelopeP Diagrams.this.envelopeP(p)
85 38 2875 - 2875 Select monoid.diagrams.Diagrams.Envelope.monoid Diagrams.this.Envelope.monoid
85 37 2876 - 2910 ApplyToImplicitArgs scala.collection.immutable.List.map d.primitives.undual.map[monoid.diagrams.Diagrams.Envelope, scala.collection.immutable.Traversable[monoid.diagrams.Diagrams.Envelope]]({ ((p: monoid.diagrams.Diagrams.Prim) => Diagrams.this.envelopeP(p)) })(immutable.this.List.canBuildFrom[monoid.diagrams.Diagrams.Envelope])
85 36 2899 - 2899 TypeApply scala.collection.immutable.List.canBuildFrom immutable.this.List.canBuildFrom[monoid.diagrams.Diagrams.Envelope]
85 39 2868 - 2911 ApplyToImplicitArgs monoid.monoids.SimpleMonoids.mconcat monoid.monoids.SimpleMonoids.mconcat[monoid.diagrams.Diagrams.Envelope](d.primitives.undual.map[monoid.diagrams.Diagrams.Envelope, scala.collection.immutable.Traversable[monoid.diagrams.Diagrams.Envelope]]({ ((p: monoid.diagrams.Diagrams.Prim) => Diagrams.this.envelopeP(p)) })(immutable.this.List.canBuildFrom[monoid.diagrams.Diagrams.Envelope]))(Diagrams.this.Envelope.monoid)
86 41 2997 - 2997 TypeApply scala.collection.immutable.List.canBuildFrom immutable.this.List.canBuildFrom[monoid.diagrams.Diagrams.Prim]
86 44 2960 - 3017 Apply monoid.diagrams.Diagrams.Diagram1.apply Diagrams.this.Diagram1.apply(Diagrams.this.Dual.apply[List[monoid.diagrams.Diagrams.Prim]](d.primitives.undual.map[monoid.diagrams.Diagrams.Prim, List[monoid.diagrams.Diagrams.Prim]](((x$1: monoid.diagrams.Diagrams.Prim) => Diagrams.this.translateP(v, x$1)))(immutable.this.List.canBuildFrom[monoid.diagrams.Diagrams.Prim])))
86 40 2998 - 3014 Apply monoid.diagrams.Diagrams.translateP Diagrams.this.translateP(v, x$1)
86 43 2969 - 3016 Apply monoid.diagrams.Diagrams.Dual.apply Diagrams.this.Dual.apply[List[monoid.diagrams.Diagrams.Prim]](d.primitives.undual.map[monoid.diagrams.Diagrams.Prim, List[monoid.diagrams.Diagrams.Prim]](((x$1: monoid.diagrams.Diagrams.Prim) => Diagrams.this.translateP(v, x$1)))(immutable.this.List.canBuildFrom[monoid.diagrams.Diagrams.Prim]))
86 42 2974 - 3015 ApplyToImplicitArgs scala.collection.immutable.List.map d.primitives.undual.map[monoid.diagrams.Diagrams.Prim, List[monoid.diagrams.Diagrams.Prim]](((x$1: monoid.diagrams.Diagrams.Prim) => Diagrams.this.translateP(v, x$1)))(immutable.this.List.canBuildFrom[monoid.diagrams.Diagrams.Prim])
90 50 3159 - 3216 Apply monoid.monoids.SemigroupSyntax.SemigroupOps.|+| monoid.monoids.SemigroupSyntax.ToSemigroupOps[monoid.diagrams.Diagrams.Diagram1](d1)(Diagrams.this.Diagram1.monoid).|+|(Diagrams.this.translate(Diagrams.this.v2mul(f1.apply(v).unmax.+(f2.apply(v).unmax), v), d2))
90 47 3182 - 3207 Apply scala.Double.+ f1.apply(v).unmax.+(f2.apply(v).unmax)
90 46 3196 - 3207 Select monoid.diagrams.Diagrams.Max.unmax f2.apply(v).unmax
90 49 3166 - 3216 Apply monoid.diagrams.Diagrams.translate Diagrams.this.translate(Diagrams.this.v2mul(f1.apply(v).unmax.+(f2.apply(v).unmax), v), d2)
90 45 3159 - 3159 Select monoid.diagrams.Diagrams.Diagram1.monoid Diagrams.this.Diagram1.monoid
90 48 3176 - 3211 Apply monoid.diagrams.Diagrams.v2mul Diagrams.this.v2mul(f1.apply(v).unmax.+(f2.apply(v).unmax), v)
91 51 3233 - 3242 Apply monoid.monoids.SemigroupSyntax.SemigroupOps.|+| monoid.monoids.SemigroupSyntax.ToSemigroupOps[monoid.diagrams.Diagrams.Diagram1](d1)(Diagrams.this.Diagram1.monoid).|+|(d2)
95 53 3323 - 3337 Apply monoid.diagrams.Diagrams.EnvelopeBad.apply Diagrams.this.EnvelopeBad.apply(x$3)
95 56 3317 - 3317 ApplyToImplicitArgs monoid.monoids.SimpleMonoids.monFunSemi monoid.monoids.SimpleMonoids.monFunSemi[monoid.diagrams.Diagrams.V2, monoid.diagrams.Diagrams.Max[Double]](Diagrams.this.maxSemi[Double](math.this.Ordering.Double))
95 55 3317 - 3317 ApplyToImplicitArgs monoid.diagrams.Diagrams.maxSemi Diagrams.this.maxSemi[Double](math.this.Ordering.Double)
95 52 3318 - 3321 Select monoid.diagrams.Diagrams.EnvelopeBad.f x$2.f
95 54 3317 - 3317 Select scala.math.Ordering.Double math.this.Ordering.Double
95 57 3312 - 3338 ApplyToImplicitArgs monoid.diagrams.Diagrams.wSemi Diagrams.this.wSemi[monoid.diagrams.Diagrams.EnvelopeBad, monoid.diagrams.Diagrams.V2 => monoid.diagrams.Diagrams.Max[Double]](((x$2: monoid.diagrams.Diagrams.EnvelopeBad) => x$2.f), ((x$3: monoid.diagrams.Diagrams.V2 => monoid.diagrams.Diagrams.Max[Double]) => Diagrams.this.EnvelopeBad.apply(x$3)))(monoid.monoids.SimpleMonoids.monFunSemi[monoid.diagrams.Diagrams.V2, monoid.diagrams.Diagrams.Max[Double]](Diagrams.this.maxSemi[Double](math.this.Ordering.Double)))
97 59 3394 - 3405 Apply monoid.diagrams.Diagrams.Envelope.apply Diagrams.this.Envelope.apply(x$5)
97 62 3388 - 3388 ApplyToImplicitArgs monoid.monoids.SimpleMonoids.monFunSemi monoid.monoids.SimpleMonoids.monFunSemi[monoid.diagrams.Diagrams.V2, monoid.diagrams.Diagrams.Max[Double]](Diagrams.this.maxSemi[Double](math.this.Ordering.Double))
97 64 3384 - 3406 ApplyToImplicitArgs monoid.diagrams.Diagrams.wMon Diagrams.this.wMon[monoid.diagrams.Diagrams.Envelope, Option[monoid.diagrams.Diagrams.V2 => monoid.diagrams.Diagrams.Max[Double]]](((x$4: monoid.diagrams.Diagrams.Envelope) => x$4.f), ((x$5: Option[monoid.diagrams.Diagrams.V2 => monoid.diagrams.Diagrams.Max[Double]]) => Diagrams.this.Envelope.apply(x$5)))(monoid.monoids.SimpleMonoids.optionMon[monoid.diagrams.Diagrams.V2 => monoid.diagrams.Diagrams.Max[Double]](monoid.monoids.SimpleMonoids.monFunSemi[monoid.diagrams.Diagrams.V2, monoid.diagrams.Diagrams.Max[Double]](Diagrams.this.maxSemi[Double](math.this.Ordering.Double))))
97 58 3389 - 3392 Select monoid.diagrams.Diagrams.Envelope.f x$4.f
97 61 3388 - 3388 ApplyToImplicitArgs monoid.diagrams.Diagrams.maxSemi Diagrams.this.maxSemi[Double](math.this.Ordering.Double)
97 60 3388 - 3388 Select scala.math.Ordering.Double math.this.Ordering.Double
97 63 3388 - 3388 ApplyToImplicitArgs monoid.monoids.SimpleMonoids.optionMon monoid.monoids.SimpleMonoids.optionMon[monoid.diagrams.Diagrams.V2 => monoid.diagrams.Diagrams.Max[Double]](monoid.monoids.SimpleMonoids.monFunSemi[monoid.diagrams.Diagrams.V2, monoid.diagrams.Diagrams.Max[Double]](Diagrams.this.maxSemi[Double](math.this.Ordering.Double)))
107 65 3683 - 3714 Throw <nosymbol> throw new scala.`package`.Exception(p.toString())
110 68 3778 - 3778 Select scala.math.Ordering.Double math.this.Ordering.Double
110 71 3778 - 3778 ApplyToImplicitArgs monoid.monoids.SimpleMonoids.monFunSemi monoid.monoids.SimpleMonoids.monFunSemi[monoid.diagrams.Diagrams.P2, monoid.diagrams.Diagrams.V2 => monoid.diagrams.Diagrams.Min[Double]](monoid.monoids.SimpleMonoids.monFunSemi[monoid.diagrams.Diagrams.V2, monoid.diagrams.Diagrams.Min[Double]](Diagrams.this.minSemi[Double](math.this.Ordering.Double)))
110 67 3784 - 3795 Apply monoid.diagrams.Diagrams.TraceBad.apply Diagrams.this.TraceBad.apply(x$7)
110 70 3778 - 3778 ApplyToImplicitArgs monoid.monoids.SimpleMonoids.monFunSemi monoid.monoids.SimpleMonoids.monFunSemi[monoid.diagrams.Diagrams.V2, monoid.diagrams.Diagrams.Min[Double]](Diagrams.this.minSemi[Double](math.this.Ordering.Double))
110 69 3778 - 3778 ApplyToImplicitArgs monoid.diagrams.Diagrams.minSemi Diagrams.this.minSemi[Double](math.this.Ordering.Double)
110 72 3773 - 3796 ApplyToImplicitArgs monoid.diagrams.Diagrams.wSemi Diagrams.this.wSemi[monoid.diagrams.Diagrams.TraceBad, monoid.diagrams.Diagrams.P2 => (monoid.diagrams.Diagrams.V2 => monoid.diagrams.Diagrams.Min[Double])](((x$6: monoid.diagrams.Diagrams.TraceBad) => x$6.f), ((x$7: monoid.diagrams.Diagrams.P2 => (monoid.diagrams.Diagrams.V2 => monoid.diagrams.Diagrams.Min[Double])) => Diagrams.this.TraceBad.apply(x$7)))(monoid.monoids.SimpleMonoids.monFunSemi[monoid.diagrams.Diagrams.P2, monoid.diagrams.Diagrams.V2 => monoid.diagrams.Diagrams.Min[Double]](monoid.monoids.SimpleMonoids.monFunSemi[monoid.diagrams.Diagrams.V2, monoid.diagrams.Diagrams.Min[Double]](Diagrams.this.minSemi[Double](math.this.Ordering.Double))))
110 66 3779 - 3782 Select monoid.diagrams.Diagrams.TraceBad.f x$6.f
111 77 3842 - 3842 ApplyToImplicitArgs monoid.monoids.SimpleMonoids.optionMon monoid.monoids.SimpleMonoids.optionMon[monoid.diagrams.Diagrams.Min[Double]](Diagrams.this.minSemi[Double](math.this.Ordering.Double))
111 80 3838 - 3857 ApplyToImplicitArgs monoid.diagrams.Diagrams.wMon Diagrams.this.wMon[monoid.diagrams.Diagrams.Trace, monoid.diagrams.Diagrams.P2 => (monoid.diagrams.Diagrams.V2 => Option[monoid.diagrams.Diagrams.Min[Double]])](((x$8: monoid.diagrams.Diagrams.Trace) => x$8.f), ((x$9: monoid.diagrams.Diagrams.P2 => (monoid.diagrams.Diagrams.V2 => Option[monoid.diagrams.Diagrams.Min[Double]])) => Diagrams.this.Trace.apply(x$9)))(monoid.monoids.SimpleMonoids.monFunMon[monoid.diagrams.Diagrams.P2, monoid.diagrams.Diagrams.V2 => Option[monoid.diagrams.Diagrams.Min[Double]]](monoid.monoids.SimpleMonoids.monFunMon[monoid.diagrams.Diagrams.V2, Option[monoid.diagrams.Diagrams.Min[Double]]](monoid.monoids.SimpleMonoids.optionMon[monoid.diagrams.Diagrams.Min[Double]](Diagrams.this.minSemi[Double](math.this.Ordering.Double)))))
111 74 3848 - 3856 Apply monoid.diagrams.Diagrams.Trace.apply Diagrams.this.Trace.apply(x$9)
111 73 3843 - 3846 Select monoid.diagrams.Diagrams.Trace.f x$8.f
111 76 3842 - 3842 ApplyToImplicitArgs monoid.diagrams.Diagrams.minSemi Diagrams.this.minSemi[Double](math.this.Ordering.Double)
111 79 3842 - 3842 ApplyToImplicitArgs monoid.monoids.SimpleMonoids.monFunMon monoid.monoids.SimpleMonoids.monFunMon[monoid.diagrams.Diagrams.P2, monoid.diagrams.Diagrams.V2 => Option[monoid.diagrams.Diagrams.Min[Double]]](monoid.monoids.SimpleMonoids.monFunMon[monoid.diagrams.Diagrams.V2, Option[monoid.diagrams.Diagrams.Min[Double]]](monoid.monoids.SimpleMonoids.optionMon[monoid.diagrams.Diagrams.Min[Double]](Diagrams.this.minSemi[Double](math.this.Ordering.Double))))
111 78 3842 - 3842 ApplyToImplicitArgs monoid.monoids.SimpleMonoids.monFunMon monoid.monoids.SimpleMonoids.monFunMon[monoid.diagrams.Diagrams.V2, Option[monoid.diagrams.Diagrams.Min[Double]]](monoid.monoids.SimpleMonoids.optionMon[monoid.diagrams.Diagrams.Min[Double]](Diagrams.this.minSemi[Double](math.this.Ordering.Double)))
111 75 3842 - 3842 Select scala.math.Ordering.Double math.this.Ordering.Double
116 83 3932 - 3932 TypeApply monoid.monoids.SimpleMonoids.freeMon monoid.monoids.SimpleMonoids.freeMon[monoid.diagrams.Diagrams.Prim]
116 82 3947 - 3958 Apply monoid.diagrams.Diagrams.Diagram1.apply Diagrams.this.Diagram1.apply(x$11)
116 85 3928 - 3959 ApplyToImplicitArgs monoid.diagrams.Diagrams.wMon Diagrams.this.wMon[monoid.diagrams.Diagrams.Diagram1, monoid.diagrams.Diagrams.Dual[List[monoid.diagrams.Diagrams.Prim]]](((x$10: monoid.diagrams.Diagrams.Diagram1) => x$10.primitives), ((x$11: monoid.diagrams.Diagrams.Dual[List[monoid.diagrams.Diagrams.Prim]]) => Diagrams.this.Diagram1.apply(x$11)))(Diagrams.this.dualMonoid[List[monoid.diagrams.Diagrams.Prim]](monoid.monoids.SimpleMonoids.freeMon[monoid.diagrams.Diagrams.Prim]))
116 81 3933 - 3945 Select monoid.diagrams.Diagrams.Diagram1.primitives x$10.primitives
116 84 3932 - 3932 ApplyToImplicitArgs monoid.diagrams.Diagrams.dualMonoid Diagrams.this.dualMonoid[List[monoid.diagrams.Diagrams.Prim]](monoid.monoids.SimpleMonoids.freeMon[monoid.diagrams.Diagrams.Prim])
120 86 4099 - 4104 Select monoid.diagrams.Diagrams.Diagram2.env d.env
121 87 4140 - 4144 Select monoid.diagrams.Diagrams.Diagram2.tr d.tr
123 92 4182 - 4230 Apply monoid.diagrams.Diagrams.Diagram2.apply Diagrams.this.Diagram2.apply(Diagrams.this.Dual.apply[List[monoid.diagrams.Diagrams.Prim]](scala.collection.immutable.List.apply[monoid.diagrams.Diagrams.Prim](p)), Diagrams.this.envelopeP(p), Diagrams.this.traceP(p))
123 89 4191 - 4204 Apply monoid.diagrams.Diagrams.Dual.apply Diagrams.this.Dual.apply[List[monoid.diagrams.Diagrams.Prim]](scala.collection.immutable.List.apply[monoid.diagrams.Diagrams.Prim](p))
123 91 4220 - 4229 Apply monoid.diagrams.Diagrams.traceP Diagrams.this.traceP(p)
123 88 4196 - 4203 Apply scala.collection.immutable.List.apply scala.collection.immutable.List.apply[monoid.diagrams.Diagrams.Prim](p)
123 90 4206 - 4218 Apply monoid.diagrams.Diagrams.envelopeP Diagrams.this.envelopeP(p)
126 95 4303 - 4319 ApplyToImplicitArgs scala.collection.immutable.List.map ps.map[monoid.diagrams.Diagrams.Diagram2, scala.collection.immutable.Traversable[monoid.diagrams.Diagrams.Diagram2]]({ ((p: monoid.diagrams.Diagrams.Prim) => Diagrams.this.primDiag(p)) })(immutable.this.List.canBuildFrom[monoid.diagrams.Diagrams.Diagram2])
126 94 4309 - 4309 TypeApply scala.collection.immutable.List.canBuildFrom immutable.this.List.canBuildFrom[monoid.diagrams.Diagrams.Diagram2]
126 97 4295 - 4320 ApplyToImplicitArgs monoid.monoids.SimpleMonoids.mconcat monoid.monoids.SimpleMonoids.mconcat[monoid.diagrams.Diagrams.Diagram2](ps.map[monoid.diagrams.Diagrams.Diagram2, scala.collection.immutable.Traversable[monoid.diagrams.Diagrams.Diagram2]]({ ((p: monoid.diagrams.Diagrams.Prim) => Diagrams.this.primDiag(p)) })(immutable.this.List.canBuildFrom[monoid.diagrams.Diagrams.Diagram2]))(Diagram2.this.monoid)
126 96 4302 - 4302 Select monoid.diagrams.Diagrams.Diagram2.monoid Diagram2.this.monoid
126 93 4310 - 4318 Apply monoid.diagrams.Diagrams.primDiag Diagrams.this.primDiag(p)
128 101 4408 - 4421 Apply scala.Tuple2.apply scala.Tuple2.apply[monoid.diagrams.Diagrams.Envelope, monoid.diagrams.Diagrams.Trace](d.env, d.tr)
128 98 4394 - 4406 Select monoid.diagrams.Diagrams.Diagram2.primitives d.primitives
128 100 4416 - 4420 Select monoid.diagrams.Diagrams.Diagram2.tr d.tr
128 99 4409 - 4414 Select monoid.diagrams.Diagrams.Diagram2.env d.env
128 102 4393 - 4422 Apply scala.Tuple2.apply scala.Tuple2.apply[monoid.diagrams.Diagrams.Dual[List[monoid.diagrams.Diagrams.Prim]], (monoid.diagrams.Diagrams.Envelope, monoid.diagrams.Diagrams.Trace)](d.primitives, scala.Tuple2.apply[monoid.diagrams.Diagrams.Envelope, monoid.diagrams.Diagrams.Trace](d.env, d.tr))
129 104 4510 - 4517 Select scala.Tuple2._1 t._2._1
129 106 4496 - 4526 Apply monoid.diagrams.Diagrams.Diagram2.apply Diagrams.this.Diagram2.apply(t._1, t._2._1, t._2._2)
129 103 4505 - 4509 Select scala.Tuple2._1 t._1
129 105 4518 - 4525 Select scala.Tuple2._2 t._2._2
131 110 4576 - 4576 ApplyToImplicitArgs monoid.diagrams.Diagrams.dualMonoid Diagrams.this.dualMonoid[List[monoid.diagrams.Diagrams.Prim]](monoid.monoids.SimpleMonoids.freeMon[monoid.diagrams.Diagrams.Prim])
131 113 4576 - 4576 ApplyToImplicitArgs monoid.monoids.SimpleMonoids.pairMon monoid.monoids.SimpleMonoids.pairMon[monoid.diagrams.Diagrams.Envelope, monoid.diagrams.Diagrams.Trace](Diagrams.this.Envelope.monoid, Diagrams.this.Trace.monoid)
131 107 4577 - 4584 Apply monoid.diagrams.Diagrams.Diagram2.d2Tuple Diagram2.this.d2Tuple(d)
131 115 4572 - 4595 ApplyToImplicitArgs monoid.diagrams.Diagrams.wMon Diagrams.this.wMon[monoid.diagrams.Diagrams.Diagram2, (monoid.diagrams.Diagrams.Dual[List[monoid.diagrams.Diagrams.Prim]], (monoid.diagrams.Diagrams.Envelope, monoid.diagrams.Diagrams.Trace))]({ ((d: monoid.diagrams.Diagrams.Diagram2) => Diagram2.this.d2Tuple(d)) }, { ((t: (monoid.diagrams.Diagrams.Dual[List[monoid.diagrams.Diagrams.Prim]], (monoid.diagrams.Diagrams.Envelope, monoid.diagrams.Diagrams.Trace))) => Diagram2.this.tuple2d2(t)) })(monoid.monoids.SimpleMonoids.pairMon[monoid.diagrams.Diagrams.Dual[List[monoid.diagrams.Diagrams.Prim]], (monoid.diagrams.Diagrams.Envelope, monoid.diagrams.Diagrams.Trace)](Diagrams.this.dualMonoid[List[monoid.diagrams.Diagrams.Prim]](monoid.monoids.SimpleMonoids.freeMon[monoid.diagrams.Diagrams.Prim]), monoid.monoids.SimpleMonoids.pairMon[monoid.diagrams.Diagrams.Envelope, monoid.diagrams.Diagrams.Trace](Diagrams.this.Envelope.monoid, Diagrams.this.Trace.monoid)))
131 109 4576 - 4576 TypeApply monoid.monoids.SimpleMonoids.freeMon monoid.monoids.SimpleMonoids.freeMon[monoid.diagrams.Diagrams.Prim]
131 112 4576 - 4576 Select monoid.diagrams.Diagrams.Trace.monoid Diagrams.this.Trace.monoid
131 114 4576 - 4576 ApplyToImplicitArgs monoid.monoids.SimpleMonoids.pairMon monoid.monoids.SimpleMonoids.pairMon[monoid.diagrams.Diagrams.Dual[List[monoid.diagrams.Diagrams.Prim]], (monoid.diagrams.Diagrams.Envelope, monoid.diagrams.Diagrams.Trace)](Diagrams.this.dualMonoid[List[monoid.diagrams.Diagrams.Prim]](monoid.monoids.SimpleMonoids.freeMon[monoid.diagrams.Diagrams.Prim]), monoid.monoids.SimpleMonoids.pairMon[monoid.diagrams.Diagrams.Envelope, monoid.diagrams.Diagrams.Trace](Diagrams.this.Envelope.monoid, Diagrams.this.Trace.monoid))
131 108 4586 - 4594 Apply monoid.diagrams.Diagrams.Diagram2.tuple2d2 Diagram2.this.tuple2d2(t)
131 111 4576 - 4576 Select monoid.diagrams.Diagrams.Envelope.monoid Diagrams.this.Envelope.monoid