Error de doble definición a pesar de los diferentes tipos de parámetros

Recibo un error de doble definición en los dos métodos siguientes:

def apply[T](state: T, onRender: T => Graphic,
             onMouseEvent: (MouseEvent, T) => T): GraphicPanel = 
  apply(state, onRender, onMouseEvent = Some(onMouseEvent))

y

def apply[T](state: T, onRender: T => Graphic,
             onKeyEvent: (KeyEvent, T) => T): GraphicPanel = 
  apply(state, onRender, onKeyEvent = Some(onKeyEvent))

¿Cuáles son los dos métodos de sobrecarga para el más generalapply Método con la firma:

def apply[T](state: T, onRender: T => Graphic,
             onTickEvent: Option[T => T] = None, fps: Int = 30,
             onMouseEvent: Option[(MouseEvent, T) => T] = None,
             onMouseMotionEvent: Option[(MouseEvent, T) => T] = None,
             onMouseInputEvent: Option[(MouseEvent, T) => T] = None,
             onKeyEvent: Option[(KeyEvent, T) => T] = None)

Supongo que aunque las clasesKeyEvent yMouseEvent tener una superclase común (InputEvent), el compilador debería poder distinguir entre ellos. Sin embargo, está lanzando el error:

doble definición: método aplicable: [T] (estado: T, onRender: T => edu.depauw.scales.graphics.Graphic, someOnKeyEvent: (java.awt.event.KeyEvent, T) => T) edu.depauw. scales.graphics.GraphicPanel y método aplican: [T] (estado: T, onRender: T => edu.depauw.scales.graphics.Graphic, onMouseEvent: (java.awt.event.MouseEvent, T) => T) edu .depauw.scales.graphics.GraphicPanel en la línea 115 tienen el mismo tipo después del borrado: (estado: Object, onRender: Function1, someOnKeyEvent: Function2) edu.depauw.scales.graphics.GraphicPanel

¿Alguien tiene alguna idea de lo que está pasando? Es cierto que no sé lo que significa la frase"despues de borrar", entonces tal vez una explicación de cómo funciona eso podría ser útil.

Respuestas a la pregunta(1)

Su respuesta a la pregunta