Basically, before this you couldn't have generic types in traits, like this:
trait X {
type Y<Z>;
}
You couldn't express "a thing that contains another thing" in one of those type expressions before, and also use the contained type. It's needed for Mappable, because it's an abstraction over the concept of modifying a value inside a container.IMO the implementation that they have is a bit obtuse, but I don't know if you can fit something better in this language.