This must be a place for the Scala compiler to improve. A person can infer it immediately, and the compiler should be able to infer the
package pz005object pz005 { def square[t: numeric] (n: t) = implicitly[numeric[t]].times (n, n) def twicea[t] (f: t => t, a: t) = f (f (a)) twiceA ( SQUARE, 2) // error not found implicit value def twiceb[t] (f: t => t) (a: t) = f (f (a)) twiceb (square) (2) // error ibid. def twicec[t] (a: t,  F: T => T) = f (f (a))   TWICEC (2, square) //error Ibid def twiced[t] (a: t) (f: t => t) = f (f (a)) twiced (2) ( Square) // ok, The compiler detects that 2 is the parameter of type T to be passed to square}
Square requires an implicit parameter of type numeric[t]
To determine whether the current context has such an implied parameter, you must first identify the type of T
Only the 4th method, "Enough ahead of time" to tell the compiler
Scala Fun topic 6