Are the parenthesis around the final tuple really needed? It doesn’t compile without them and the compiler tries to add only the Sort(“time”) and complains that it expects a tuple instead.
val maxSortCounts: Map[Sort, Int] =
sorts.map(s => s -> usedPredicates.map(pred => pred.signature.count(_ == s)).max)
.toMap + ((Sort("time"), 1))
I’ve tried to reproduce this behaviour inside the REPL with a shorter example, but there it behaves as intended. The variable sorts is a Seq[Sort].
error: type mismatch;
found : <snip>.Sort
required: (<snip>.Sort, Int)
.toMap + (Sort("time"), 1)
Yes, they are needed. Otherwise the compiler will interpret the code as
x.+(y, z)instead ofx.+((y, z)).Instead, you can use ArrowAssoc again:
x + (y -> z). Notice, the parentheses are also needed because+and-have the same precedence (only the first sign of a method defines its precedence).