¿Cómo usar Scala's this typing, abstract types, etc. para implementar un Self type?

No pude encontrar la respuesta a esto en ninguna otra pregunta. Supongamos que tengo una superclase abstracta Abstract0 con dos subclases, Concrete1 y Concrete1. Quiero poder definir en Abstract0 algo como

def setOption(...): Self = {...}

donde Self sería el subtipo concreto. Esto permitiría encadenar llamadas a setOption de esta manera:

val obj = new Concrete1.setOption(...).setOption(...)

y todavía obtener Concrete1 como el tipo inferido de obj.

Lo que no quiero es definir esto:

abstract class Abstract0[T <: Abstract0[T]]

porque hace que sea más difícil para los clientes manejar este tipo. Probé varias posibilidades, incluido un tipo abstracto:

abstract class Abstract0 {
  type Self <: Abstract0
}

class Concrete1 extends Abstract0 {
  type Self = Concrete1
}

pero es imposible implementar setOption, porquethis&nbsp;en Abstract0 no tiene el tipo Self. Y usandothis: Self =>&nbsp;tampoco funciona en Abstract0.

¿Qué soluciones hay para este problema?