By Alvin Alexander. Last updated: August 28, 2024
UPDATE: As a more recent example, see my free “Scala 3 Intersection Types” video.
As a brief note to self, here’s an early example of the syntax of Intersection Types in Scala 3 (Dotty):
trait A:
def a = "a"
trait B:
def b = "b"
trait C:
def c = "c"
object Main {
def foo(d: A & B & C): Unit =
println(d.a)
println(d.b)
println(d.c)
def main(args: Array[String]): Unit =
class D extends A with B with C
val d = new D
foo(d)
}
There’s much more to say about intersection types, but I just want to start today by showing this syntax:
def foo(d: A & B & C) ...
------------
A few notes about intersection types (&
) vs. with
:
A & B
replacesA with B
&
is commutative (conversely, order is important withwith
)A with B
is different thanB with A
A & B
is the same asB & A
I’ll write more about intersection types in the future, but for now you can learn more on this Dotty page. (That link is broken for now; hopefully they’ll get that page back up.)