¿Por qué se requiere la técnica Aux para los cálculos a nivel de tipo?

Estoy bastante seguro de que me falta algo aquí, ya que soy bastante nuevo en Shapeless y estoy aprendiendo, pero ¿cuándo es realmente la técnica Aux?necesario? Veo que se usa para exponer untype declaración elevándola a la firma de otro "compañero"type definición.

trait F[A] { type R; def value: R }
object F { type Aux[A,RR] = F[A] { type R = RR } }

pero ¿no es esto casi equivalente a poner R en la firma tipo de F?

trait F[A,R] { def value: R }
implicit def fint = new F[Int,Long] { val value = 1L }
implicit def ffloat = new F[Float,Double] { val value = 2.0D }
def f[T,R](t:T)(implicit f: F[T,R]): R = f.value
f(100)    // res4: Long = 1L
f(100.0f) // res5: Double = 2.0

Veo que el tipo dependiente de la ruta traería beneficiosSi uno podría usarlos en listas de argumentos, pero sabemos que no podemos hacer

def g[T](t:T)(implicit f: F[T], r: Blah[f.R]) ...

por lo tanto, todavía estamos obligados a poner un parámetro de tipo adicional en la firma deg. Al usar elAux técnica, somosademás requerido para pasar tiempo adicional escribiendo al compañeroobject. Desde el punto de vista del uso, a un usuario ingenuo como yo le parecería que no hay ningún beneficio en el uso de tipos dependientes de la ruta.

Solo se me ocurre un caso, es decir, para un cálculo de nivel de tipo dado se devuelve más de un resultado de nivel de tipo, y es posible que desee utilizar solo uno de ellos.

Supongo que todo se reduce a pasar por alto algo en mi ejemplo simple.

Respuestas a la pregunta(1)

Su respuesta a la pregunta