Text this: Associated types and constraint propagation for generic programming in Scala.