Say I see this:
object ThingA extends OtherThingA[ThingB, ThingA] {...
and this:
trait OtherThingA[B, A <: LastThing[B]] extends ...
What is this doing exactly?
Here is what I understand:
- ThingA is using the trait OtherThing and so has to implement the trait's methods or it now has access to the concrete public members.
 
I guess when we actually extends OtherThingA, we're extending it and declaring the types of it too which are ThingB and ThingA?