How do I represent an homegeneous list of ADT in Scala?

72 Views Asked by At

I'd like to express a contract that models a homogeneous list containing an ADT.

Let's say I have an ADT

sealed trait Letter
case object A extends Letter
case object B extends Letter

If I declare a contract like

case class Letters(letters: List[Letter])

I can instantiate the class as

Letters(Set(A, A))
Letters(Set(B, B))

but also as

Letters(Set(A, B))

I'd like to make this last case illegal at compile time.

0

There are 0 best solutions below