Skip to content

Commit 5b6b323

Browse files
committed
Prepare for Scala 3.4
Type matches become more strict following scala/scala3#18262
1 parent c40c3d8 commit 5b6b323

File tree

8 files changed

+177
-107
lines changed

8 files changed

+177
-107
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ import polynomial.morphism.~>
6464
type F[Y] = (Store[Boolean, _] ~> Monomial[Byte, Char, _])[Y]
6565

6666
val M: Mermaid[F] = summon[Mermaid[F]]
67-
// M: Mermaid[F] = polynomial.mermaid.Mermaid$$anon$1@6470dd67
67+
// M: Mermaid[F] = polynomial.mermaid.Mermaid$$anon$1@c13f7ae
6868

6969
println(M.showTitledGraph(titleFmt = Format.Cardinal, graphFmt = Format.Specific))
7070
// ```mermaid

build.sbt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ inThisBuild(List(
1717
)
1818
),
1919
scalacOptions ++= Seq(
20-
"-deprecation",
2120
"-feature",
2221
"-source:future",
2322
"-Werror",

modules/mermaid/shared/src/main/scala/polynomial/mermaid/Mermaid.scala

Lines changed: 34 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -4,38 +4,37 @@ import polynomial.mermaid.Mermaid.CustomLabels
44
import polynomial.mermaid.render.p.MermaidP
55
import polynomial.mermaid.render.q.MermaidQ
66
import polynomial.mermaid.render.Format.{Cardinal, Generic, Specific}
7-
import polynomial.mermaid.render.{Render}
8-
import polynomial.mermaid.render.addTitle
7+
import polynomial.mermaid.render.{Render, addTitle}
98
import polynomial.morphism.PolyMap
109
import polynomial.`object`.{Binomial, Monomial, Store}
1110

1211
trait Mermaid[F[_]]:
1312
def showGraph(graphFmt: Format): String
14-
def showGraphCustom(graphFmt: Format, labels: CustomLabels[F]): String
13+
def showGraphCustom[Y](graphFmt: Format, labels: CustomLabels[F[Y]]): String
1514
def showTitle(titleFmt: Format): String
16-
def showTitleCustom(labels: CustomLabels[F]): String
15+
def showTitleCustom[Y](labels: CustomLabels[F[Y]]): String
1716
def showTitleHtml(titleFmt: Format): String
18-
def showTitleHtmlCustom(labels: CustomLabels[F]): String
17+
def showTitleHtmlCustom[Y](labels: CustomLabels[F[Y]]): String
1918
def showTitledGraph(titleFmt: Format, graphFmt: Format): String
20-
def showTitledGraphCustom(graphFmt: Format, labels: CustomLabels[F]): String
19+
def showTitledGraphCustom[Y](graphFmt: Format, labels: CustomLabels[F[Y]]): String
2120

2221
object Mermaid:
2322

24-
type ParamLabels[P[_]] = P[Any] match
25-
case Monomial[a, b, Any] => (String, String)
26-
case Binomial[a1, b1, a2, b2, Any] => ((String, String), (String, String))
27-
case Store[s, Any] => String
23+
type ParamLabels[X] = X match
24+
case Monomial[a, b, y] => (String, String)
25+
case Binomial[a1, b1, a2, b2, y] => ((String, String), (String, String))
26+
case Store[s, y] => String
2827

29-
type PolynomialLabels[P[_]] = P[Any] match
30-
case Binomial[a1, b1, a2, b2, Any] => String
31-
case Monomial[a, b, Any] => String
32-
case Store[s, Any] => String
28+
type PolynomialLabels[X] = X match
29+
case Binomial[a1, b1, a2, b2, y] => String
30+
case Monomial[a, b, y] => String
31+
case Store[s, y] => String
3332

34-
type CustomLabels[P[_]] = P[Any] match
35-
case PolyMap[Binomial[a1, b1, a2, b2, _], Monomial[a3, b3, _], Any] => (String, String)
36-
case PolyMap[Monomial[a, b, _], Monomial[a3, b3, _], Any] => (String, String)
37-
case PolyMap[Store[s, _], Monomial[a3, b3, _], Any] => (String, String)
38-
case PolyMap[Store[s, _], Binomial[a1, b1, a2, b2, _], Any] => (String, String)
33+
type CustomLabels[X] = X match
34+
case PolyMap[p, q, y] => CustomLabels[(p[y], q[y])]
35+
case (Monomial[a1, b1, y1], Monomial[a2, b2, y2]) => (String, String)
36+
case (Store[s, y1], Binomial[a1, b1, a2, b2, y2]) => (String, String)
37+
case (Store[s, y1], Monomial[a, b, y2]) => (String, String)
3938

4039
given mooreStoreToMono[S, A, B](using
4140
P: MermaidP[Store[S, _]],
@@ -53,7 +52,7 @@ object Mermaid:
5352
Render.mermaidCodeFence(Q.graphQGeneric((labelA, labelB))(P.graphPGeneric(P.polynomialGeneric(labelS), labelS)))
5453
case Specific =>
5554
Render.mermaidCodeFence(Q.graphQSpecific(P.graphPSpecific(P.polynomialSpecific)))
56-
def showGraphCustom(graphFmt: Format, labels: (String, String)): String =
55+
def showGraphCustom[Y](graphFmt: Format, labels: (String, String)): String =
5756
graphFmt match
5857
case Cardinal =>
5958
Render.mermaidCodeFence(Q.graphQCardinal(P.graphPCardinal(P.polynomialCardinal)))
@@ -69,7 +68,7 @@ object Mermaid:
6968
Render.mermaidCodeFence(Render.title(P.polynomialGeneric(labelS), 3, Q.polynomialGeneric((labelA, labelB)), 3))
7069
case Specific =>
7170
Render.mermaidCodeFence(Render.title(P.polynomialSpecific, 3, Q.polynomialSpecific, 3))
72-
def showTitleCustom(labels: (String, String)): String =
71+
def showTitleCustom[Y](labels: (String, String)): String =
7372
Render.mermaidCodeFence(Render.title(labels._1, 3, labels._2, 3))
7473
def showTitleHtml(titleFmt: Format): String =
7574
titleFmt match
@@ -79,7 +78,7 @@ object Mermaid:
7978
Render.polyMap(P.graphPGeneric(P.polynomialGeneric(labelS), labelS), Q.graphQGeneric((labelA, labelB))(P.graphPGeneric(P.polynomialGeneric(labelS), labelS)))
8079
case Specific =>
8180
Render.polyMap(P.graphPSpecific(P.polynomialSpecific), Q.graphQSpecific(P.graphPSpecific(P.polynomialSpecific)))
82-
def showTitleHtmlCustom(labels: (String, String)): String =
81+
def showTitleHtmlCustom[Y](labels: (String, String)): String =
8382
Render.polyMap(labels._1, labels._2)
8483
def showTitledGraph(titleFmt: Format, graphFmt: Format): String =
8584
(titleFmt, graphFmt) match
@@ -110,7 +109,7 @@ object Mermaid:
110109
case (Specific, Specific) =>
111110
Render.mermaidCodeFence(Q.graphQSpecific(P.graphPSpecific(P.polynomialSpecific)))
112111
.addTitle(P.polynomialSpecific, 3, Q.polynomialSpecific, 3)
113-
def showTitledGraphCustom(graphFmt: Format, labels: (String, String)): String =
112+
def showTitledGraphCustom[Y](graphFmt: Format, labels: (String, String)): String =
114113
graphFmt match
115114
case Cardinal =>
116115
Render.mermaidCodeFence(Q.graphQCardinal(P.graphPCardinal(P.polynomialCardinal)))
@@ -138,7 +137,7 @@ object Mermaid:
138137
Render.mermaidCodeFence(Q.graphQGeneric((labelA, labelB))(P.graphPGeneric(P.polynomialGeneric(labelS), labelS)))
139138
case Specific =>
140139
Render.mermaidCodeFence(Q.graphQSpecific(P.graphPSpecific(P.polynomialSpecific)))
141-
def showGraphCustom(graphFmt: Format, labels: (String, String)): String =
140+
def showGraphCustom[Y](graphFmt: Format, labels: (String, String)): String =
142141
graphFmt match
143142
case Cardinal =>
144143
Render.mermaidCodeFence(Q.graphQCardinal(P.graphPCardinal(P.polynomialCardinal)))
@@ -154,7 +153,7 @@ object Mermaid:
154153
Render.mermaidCodeFence(Render.title(P.polynomialGeneric(labelS), 3, Q.polynomialGeneric((labelA, labelB)), 3))
155154
case Specific =>
156155
Render.mermaidCodeFence(Render.title(P.polynomialSpecific, 3, Q.polynomialSpecific, 3))
157-
def showTitleCustom(labels: (String, String)): String =
156+
def showTitleCustom[Y](labels: (String, String)): String =
158157
Render.mermaidCodeFence(Render.title(labels._1, 3, labels._2, 3))
159158
def showTitleHtml(titleFmt: Format): String =
160159
titleFmt match
@@ -164,7 +163,7 @@ object Mermaid:
164163
Render.polyMap(P.graphPGeneric(P.polynomialGeneric(labelS), labelS), Q.graphQGeneric((labelA, labelB))(P.graphPGeneric(P.polynomialGeneric(labelS), labelS)))
165164
case Specific =>
166165
Render.polyMap(P.graphPSpecific(P.polynomialSpecific), Q.graphQSpecific(P.graphPSpecific(P.polynomialSpecific)))
167-
def showTitleHtmlCustom(labels: (String, String)): String =
166+
def showTitleHtmlCustom[Y](labels: (String, String)): String =
168167
Render.polyMap(labels._1, labels._2)
169168
def showTitledGraph(titleFmt: Format, graphFmt: Format): String =
170169
(titleFmt, graphFmt) match
@@ -195,7 +194,7 @@ object Mermaid:
195194
case (Specific, Specific) =>
196195
Render.mermaidCodeFence(Q.graphQSpecific(P.graphPSpecific(P.polynomialSpecific)))
197196
.addTitle(P.polynomialSpecific, 3, Q.polynomialSpecific, 3)
198-
def showTitledGraphCustom(graphFmt: Format, labels: (String, String)): String =
197+
def showTitledGraphCustom[Y](graphFmt: Format, labels: (String, String)): String =
199198
graphFmt match
200199
case Cardinal =>
201200
Render.mermaidCodeFence(Q.graphQCardinal(P.graphPCardinal(P.polynomialCardinal)))
@@ -224,7 +223,7 @@ object Mermaid:
224223
Render.mermaidCodeFence(Q.graphQGeneric((labelA2, labelB2))(P.graphPGeneric(P.polynomialGeneric((labelA1, labelB1)), (labelA1, labelB1))))
225224
case Specific =>
226225
Render.mermaidCodeFence(Q.graphQSpecific(P.graphPSpecific(P.polynomialSpecific)))
227-
def showGraphCustom(graphFmt: Format, labels: (String, String)): String =
226+
def showGraphCustom[Y](graphFmt: Format, labels: (String, String)): String =
228227
graphFmt match
229228
case Cardinal =>
230229
Render.mermaidCodeFence(Q.graphQCardinal(P.graphPCardinal(P.polynomialCardinal)))
@@ -240,7 +239,7 @@ object Mermaid:
240239
Render.mermaidCodeFence(Render.title(P.polynomialGeneric((labelA1, labelB1)), 4, Q.polynomialGeneric((labelA2, labelB2)), 4))
241240
case Specific =>
242241
Render.mermaidCodeFence(Render.title(P.polynomialSpecific, 4, Q.polynomialSpecific, 4))
243-
def showTitleCustom(labels: (String, String)): String =
242+
def showTitleCustom[Y](labels: (String, String)): String =
244243
Render.mermaidCodeFence(Render.title(labels._1, 4, labels._2, 4))
245244
def showTitleHtml(titleFmt: Format): String =
246245
titleFmt match
@@ -250,7 +249,7 @@ object Mermaid:
250249
Render.polyMap(P.graphPGeneric(P.polynomialGeneric((labelA1, labelB1)), (labelA1, labelB1)), Q.graphQGeneric((labelA2, labelB2))(P.graphPGeneric(P.polynomialGeneric((labelA1, labelB1)), (labelA1, labelB1))))
251250
case Specific =>
252251
Render.polyMap(P.graphPSpecific(P.polynomialSpecific), Q.graphQSpecific(P.graphPSpecific(P.polynomialSpecific)))
253-
def showTitleHtmlCustom(labels: (String, String)): String =
252+
def showTitleHtmlCustom[Y](labels: (String, String)): String =
254253
Render.polyMap(labels._1, labels._2)
255254
def showTitledGraph(titleFmt: Format, graphFmt: Format): String =
256255
(titleFmt, graphFmt) match
@@ -281,7 +280,7 @@ object Mermaid:
281280
case (Specific, Specific) =>
282281
Render.mermaidCodeFence(Q.graphQSpecific(P.graphPSpecific(P.polynomialSpecific)))
283282
.addTitle(P.polynomialSpecific, 4, Q.polynomialSpecific, 4)
284-
def showTitledGraphCustom(graphFmt: Format, labels: (String, String)): String =
283+
def showTitledGraphCustom[Y](graphFmt: Format, labels: (String, String)): String =
285284
graphFmt match
286285
case Cardinal =>
287286
Render.mermaidCodeFence(Q.graphQCardinal(P.graphPCardinal(P.polynomialCardinal)))
@@ -311,7 +310,7 @@ object Mermaid:
311310
Render.mermaidCodeFence(Q.graphQGeneric(((labelA1, labelB1), (labelA2, labelB2)))(P.graphPGeneric(P.polynomialGeneric(labelS), labelS)))
312311
case Specific =>
313312
Render.mermaidCodeFence(Q.graphQSpecific(P.graphPSpecific(P.polynomialSpecific)))
314-
def showGraphCustom(graphFmt: Format, labels: (String, String)): String =
313+
def showGraphCustom[Y](graphFmt: Format, labels: (String, String)): String =
315314
graphFmt match
316315
case Cardinal =>
317316
Render.mermaidCodeFence(Q.graphQCardinal(P.graphPCardinal(P.polynomialCardinal)))
@@ -327,7 +326,7 @@ object Mermaid:
327326
Render.mermaidCodeFence(Render.title(P.polynomialGeneric(labelS), 3, Q.polynomialGeneric(((labelA1, labelB1), (labelA2, labelB2))), 3))
328327
case Specific =>
329328
Render.mermaidCodeFence(Render.title(P.polynomialSpecific, 3, Q.polynomialSpecific, 3))
330-
def showTitleCustom(labels: (String, String)): String =
329+
def showTitleCustom[Y](labels: (String, String)): String =
331330
Render.mermaidCodeFence(Render.title(labels._1, 3, labels._2, 3))
332331
def showTitleHtml(titleFmt: Format): String =
333332
titleFmt match
@@ -337,7 +336,7 @@ object Mermaid:
337336
Render.polyMap(P.graphPGeneric(P.polynomialGeneric(labelS), labelS), Q.graphQGeneric(((labelA1, labelB1), (labelA2, labelB2)))(P.graphPGeneric(P.polynomialGeneric(labelS), labelS)))
338337
case Specific =>
339338
Render.polyMap(P.graphPSpecific(P.polynomialSpecific), Q.graphQSpecific(P.graphPSpecific(P.polynomialSpecific)))
340-
def showTitleHtmlCustom(labels: (String, String)): String =
339+
def showTitleHtmlCustom[Y](labels: (String, String)): String =
341340
Render.polyMap(labels._1, labels._2)
342341
def showTitledGraph(titleFmt: Format, graphFmt: Format): String =
343342
(titleFmt, graphFmt) match
@@ -368,7 +367,7 @@ object Mermaid:
368367
case (Specific, Specific) =>
369368
Render.mermaidCodeFence(Q.graphQSpecific(P.graphPSpecific(P.polynomialSpecific)))
370369
.addTitle(P.polynomialSpecific, 3, Q.polynomialSpecific, 3)
371-
def showTitledGraphCustom(graphFmt: Format, labels: (String, String)): String =
370+
def showTitledGraphCustom[Y](graphFmt: Format, labels: (String, String)): String =
372371
graphFmt match
373372
case Cardinal =>
374373
Render.mermaidCodeFence(Q.graphQCardinal(P.graphPCardinal(P.polynomialCardinal)))

modules/mermaid/shared/src/main/scala/polynomial/mermaid/render/p/MermaidP.scala

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -8,17 +8,17 @@ import typesize.SizeOf
88

99
trait MermaidP[P[_]]:
1010
// Base constructor of the P component of the graph
11-
def graphP(polynomialLabelP: PolynomialLabels[P], paramLabelsP: ParamLabels[P]): String
11+
def graphP[Y](polynomialLabelP: PolynomialLabels[P[Y]], paramLabelsP: ParamLabels[P[Y]]): String
1212
// Impl constructors of the P component of the graph e.g. A[ ]-->B[ ]
13-
def graphPCardinal(polynomialLabelP: PolynomialLabels[P]): String
14-
def graphPGeneric(polynomialLabelP: PolynomialLabels[P], paramLabelsP: ParamLabels[P]): String
15-
def graphPSpecific(polynomialLabelP: PolynomialLabels[P]): String
13+
def graphPCardinal[Y](polynomialLabelP: PolynomialLabels[P[Y]]): String
14+
def graphPGeneric[Y](polynomialLabelP: PolynomialLabels[P[Y]], paramLabelsP: ParamLabels[P[Y]]): String
15+
def graphPSpecific[Y](polynomialLabelP: PolynomialLabels[P[Y]]): String
1616
// Built-in coefficient labels and exponent labels, e.g., Boolean
17-
def paramLabelsCardinal: ParamLabels[P]
18-
def paramLabelsSpecific: ParamLabels[P]
17+
def paramLabelsCardinal[Y]: ParamLabels[P[Y]]
18+
def paramLabelsSpecific[Y]: ParamLabels[P[Y]]
1919
// Text representation of polynomials e.g., Byᴬ
2020
def polynomialCardinal: String
21-
def polynomialGeneric(paramLabelsP: ParamLabels[P]): String
21+
def polynomialGeneric[Y](paramLabelsP: ParamLabels[P[Y]]): String
2222
def polynomialSpecific: String
2323
// Variable labels, e.g., y
2424
def variableLabel: String
@@ -27,21 +27,21 @@ object MermaidP:
2727

2828
given [S](using N: NameOf[S], S: SizeOf[S]): MermaidP[Store[S, _]] =
2929
new MermaidP[Store[S, _]]:
30-
def graphP(polynomialLabelP: String, paramLabelsP: String): String =
30+
def graphP[Y](polynomialLabelP: String, paramLabelsP: String): String =
3131
s"S[$paramLabelsP]"
32-
def graphPCardinal(polynomialLabelP: String): String =
32+
def graphPCardinal[Y](polynomialLabelP: String): String =
3333
graphP(polynomialLabelP, paramLabelsCardinal)
34-
def graphPGeneric(polynomialLabelP: String, paramLabelsP: String): String =
34+
def graphPGeneric[Y](polynomialLabelP: String, paramLabelsP: String): String =
3535
graphP(polynomialLabelP, Font.courier(paramLabelsP))
36-
def graphPSpecific(polynomialLabelP: String): String =
36+
def graphPSpecific[Y](polynomialLabelP: String): String =
3737
graphP(polynomialLabelP, Font.courier(paramLabelsSpecific))
38-
def paramLabelsCardinal: String =
38+
def paramLabelsCardinal[Y]: String =
3939
Render.cardinality(S.size)
40-
def paramLabelsSpecific: String =
40+
def paramLabelsSpecific[Y]: String =
4141
N.name
4242
def polynomialCardinal: String =
4343
Render.monomial(paramLabelsCardinal, variableLabel, paramLabelsCardinal)
44-
def polynomialGeneric(paramLabelsP: String): String =
44+
def polynomialGeneric[Y](paramLabelsP: String): String =
4545
Render.monomial(Font.courier(paramLabelsP), variableLabel, Font.courier(paramLabelsP))
4646
def polynomialSpecific: String =
4747
Render.monomial(Font.courier(paramLabelsSpecific), variableLabel, Font.courier(paramLabelsSpecific))
@@ -50,27 +50,27 @@ object MermaidP:
5050

5151
given [A, B](using NA: NameOf[A], NB: NameOf[B], SA: SizeOf[A], SB: SizeOf[B]): MermaidP[Monomial[A, B, _]] =
5252
new MermaidP[Monomial[A, B, _]]:
53-
def graphP(polynomialLabelP: String, paramLabelsQ: (String, String)): String =
53+
def graphP[Y](polynomialLabelP: String, paramLabelsQ: (String, String)): String =
5454
s"""|A2[ ]:::point
5555
|subgraph s[ ]
5656
| A2:::point---MermaidPMono
5757
| MermaidPMono[${polynomialLabelP}]:::empty
5858
| MermaidPMono---B2
5959
|end
6060
|B2[ ]:::point""".stripMargin
61-
def graphPCardinal(polynomialLabelP: String): String =
61+
def graphPCardinal[Y](polynomialLabelP: String): String =
6262
graphP(polynomialLabelP, paramLabelsCardinal)
63-
def graphPGeneric(polynomialLabelP: String, paramLabelsP: (String, String)): String =
63+
def graphPGeneric[Y](polynomialLabelP: String, paramLabelsP: (String, String)): String =
6464
graphP(polynomialLabelP, paramLabelsP)
65-
def graphPSpecific(polynomialLabelP: String): String =
65+
def graphPSpecific[Y](polynomialLabelP: String): String =
6666
graphP(polynomialLabelP, paramLabelsSpecific)
67-
def paramLabelsCardinal: (String, String) =
67+
def paramLabelsCardinal[Y]: (String, String) =
6868
(Render.cardinality(SA.size), Render.cardinality(SB.size))
69-
def paramLabelsSpecific: (String, String) =
69+
def paramLabelsSpecific[Y]: (String, String) =
7070
(NA.name, NB.name)
7171
def polynomialCardinal: String =
7272
Render.monomial(Font.courier(paramLabelsCardinal._2), variableLabel, Font.courier(paramLabelsCardinal._1))
73-
def polynomialGeneric(paramLabelsP: (String, String)): String =
73+
def polynomialGeneric[Y](paramLabelsP: (String, String)): String =
7474
Render.monomial(Font.courier(paramLabelsP._2), variableLabel, Font.courier(paramLabelsP._1))
7575
def polynomialSpecific: String =
7676
Render.monomial(Font.courier(paramLabelsSpecific._2), variableLabel, Font.courier(paramLabelsSpecific._1))

0 commit comments

Comments
 (0)