¿Cómo declarar rasgos como "parámetros de constructor" implícitos?

Estoy diseñando una jerarquía de clases, que consiste en una clase base junto con varios rasgos. La clase base proporciona implementaciones predeterminadas de varios métodos, y los rasgos anulan selectivamente ciertos métodos a través deabstract override, para actuar como rasgos apilables / mixins.

Desde una perspectiva de diseño, esto funciona bien y se asigna al dominio para que pueda agregar una función de filtrado desde aquí (un rasgo) con un predicado desde aquí (otro rasgo), etc.

Sin embargo, ahora me gustaría que algunos de mis rasgos tomen parámetros implícitos. Estoy feliz de que esto todavía tenga sentido desde una perspectiva de diseño, y no resultaría confuso en la práctica. Sin embargo, no puedo convencer al compilador para que se ejecute con él.

El núcleo del problema parece ser que no puedo proporcionar argumentos de constructor para un rasgo, de modo que puedan marcarse como implícitos. Hacer referencia al parámetro implícito dentro de la implementación de un método no se compila con el mensaje esperado "no se pudo encontrar el valor implícito"; Traté de "propagar" lo implícito desde la etapa de construcción (donde, en la práctica, siempre está dentro del alcance) para estar disponible dentro del método a través de

implicit val e = implicitly[ClassName]

but (como sin duda muchos de ustedes esperan)es definición falló con el mismo mensaje.

arece que el problema aquí es que no puedo convencer al compilador de que etiquete la firma del rasgo con unaimplicit ClassName flag, y obligar a los llamadores (es decir, aquellos que mezclan el rasgo en un objeto) para proporcionar lo implícito. Actualmente mis llamadasso hacerlo, pero el compilador no está comprobando a este nivel.

¿Hay alguna forma de marcar un rasgo que requiera ciertas implicidades disponibles en el momento de la construcción?

(Y si no, ¿esto simplemente no se ha implementado todavía o hay una razón más profunda por la que esto no es práctico?)

Respuestas a la pregunta(5)

Su respuesta a la pregunta