Skip to content

Instantly share code, notes, and snippets.

val ints = new Set() // assuming Set was implemented
ints.add(1.0)
ints.add(3.0)
scala> ints.get(0)
res0: Any = 1.0
scala> ints.get(0).asInstanceOf[Double]
res1: Double = 1.0
trait DoubleSet {
def get(index: Long): Double
def add(value: Double): Set
}
trait StringSet {
def get(index: Long): String
def add(value: String): Set
}
trait Set[A] {
def get(index: Long): A
def add(value: A): Set[A]
}
val doubles = new Set[Double]()
doubles.add(1.0)
doubles.add(3.0)
scala> doubles.get(0)
res1: Double = 1.0
val strings = new Set[String]()
strings.add("one")
strings.add("two")
trait Perishable {
def expired: Boolean
}
case class Baguette() extends Perishable {
def expired: Boolean = ???
}
case class Croissant() extends Perishable {
def expired: Boolean = ???
trait DailyOrderService {
def needsReplacing(perishables: List[Perishable]): List[Perishable] = {
perishables.filter(_.expired)
}
}
trait PerishableLike[A] {
def expired: Boolean
}
case class PerishableLikeBaguette(b: Baguette) extends PerishableLike[Baguette] {
def expired: Boolean = ???
}
case class PerishableLikeCroissant(c: Croissant) extends PerishableLike[Croissant] {
def expired: Boolean = ???
def needsReplacing[T](perishables: List[PerishableLike[T]]): List[PerishableLike[T]] = {
perishables.filter(_.expired)
}